77 int GetInt()
const {
return static_cast<int>(number); }
83 const std::string&
GetString()
const {
return str; }
134 for (
size_t i = 0;
i <
input.size(); ++
i) {
174 if (
i == 0 ||
input[
i - 1] !=
'\\') {
189 void SkipWhitespace();
209 void Indent(std::ostream&
outputFile,
int level);
211 void Indent(std::ofstream&
outputFile,
int level);
232void JsonParser::SkipWhitespace() {
233 while (position < data.size() && std::isspace(data[position])) {
242JsonValue JsonParser::ParseValue() {
247 return ParseObject();
251 return ParseString();
257 return ParseNumber();
265JsonValue JsonParser::ParseNumber() {
268 while (
end_pos < data.size() &&
284 return JsonValue(
num);
288 return JsonValue(
num);
296JsonValue JsonParser::ParseString() {
298 size_t end_pos = data.find(
'"', position);
299 std::string str = data.substr(position,
end_pos - position);
301 return JsonValue(str);
308JsonValue JsonParser::ParseBool() {
309 if (data.compare(position, 4,
"true") == 0) {
311 return JsonValue(
true);
312 }
else if (data.compare(position, 5,
"false") == 0) {
314 return JsonValue(
false);
325JsonValue JsonParser::ParseNull() {
326 if (data.compare(position, 4,
"null") == 0) {
339JsonValue JsonParser::ParseObject() {
343 while (data[position] !=
'}') {
345 std::string key = ParseString().
GetString();
349 JsonValue value = ParseValue();
353 if (data[position] ==
',') {
359 return JsonValue(
obj);
366JsonValue JsonParser::ParseArray() {
370 while (data[position] !=
']') {
372 JsonValue value = ParseValue();
373 arr.push_back(value);
376 if (data[position] ==
',') {
382 return JsonValue(
arr);
393 std::cerr <<
"Error: Unable to open file " <<
filename <<
" for writing."
408void JsonParser::WriteJsonValue(std::ofstream&
outputFile,
411 case JsonValueType::Null:
414 case JsonValueType::Number:
417 case JsonValueType::String:
420 case JsonValueType::Bool:
423 case JsonValueType::Object: {
437 case JsonValueType::JArray: {
441 for (
const auto& value :
arr) {
458 this->PrintJsonValue(std::cout,
jsonValue);
459 std::cout << std::endl;
469 case JsonValueType::Null:
472 case JsonValueType::Number:
475 case JsonValueType::String:
478 case JsonValueType::Bool:
481 case JsonValueType::Object: {
495 case JsonValueType::JArray: {
499 for (
const auto& value :
arr) {
504 PrintJsonValue(
output, value);
Definition fims_json.hpp:106
void Show(JsonValue jsonValue)
Definition fims_json.hpp:457
void WriteToFile(const std::string &filename, JsonValue jsonValue)
Definition fims_json.hpp:390
static std::string PrettyFormatJSON(const std::string &json)
Formats a JSON string.
Definition fims_json.hpp:128
JsonValue Parse(const std::string &json)
Definition fims_json.hpp:222
static std::string removeWhitespace(const std::string &input)
Definition fims_json.hpp:116
Definition fims_json.hpp:50
JsonValue(bool b)
Definition fims_json.hpp:65
JsonValue()
Definition fims_json.hpp:53
JsonValue(const JsonArray &arr)
Definition fims_json.hpp:71
double GetDouble() const
Definition fims_json.hpp:80
JsonArray & GetArray()
Definition fims_json.hpp:92
const std::string & GetString() const
Definition fims_json.hpp:83
JsonValue(const JsonObject &obj)
Definition fims_json.hpp:68
JsonValue(double num)
Definition fims_json.hpp:59
int GetInt() const
Definition fims_json.hpp:77
JsonObject & GetObject()
Definition fims_json.hpp:89
bool GetBool() const
Definition fims_json.hpp:86
JsonValue(const std::string &str)
Definition fims_json.hpp:62
JsonValueType GetType() const
Definition fims_json.hpp:74
JsonValue(int num)
Definition fims_json.hpp:56
std::vector< JsonValue > JsonArray
Definition fims_json.hpp:33
JsonValueType
Definition fims_json.hpp:38
@ Bool
Definition fims_json.hpp:42
@ Number
Definition fims_json.hpp:40
@ String
Definition fims_json.hpp:41
@ Object
Definition fims_json.hpp:43
@ Null
Definition fims_json.hpp:39
@ JArray
Definition fims_json.hpp:44
std::map< std::string, JsonValue > JsonObject
Definition fims_json.hpp:28
void clear_internal()
Clears the internal objects.
Definition rcpp_interface.hpp:279