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() {
245 if (position >= data.size()) {
251 return ParseObject();
255 return ParseString();
261 return ParseNumber();
273JsonValue JsonParser::ParseNumber() {
276 while (
end_pos < data.size() &&
292 return JsonValue(
num);
296 return JsonValue(
num);
304JsonValue JsonParser::ParseString() {
306 size_t end_pos = data.find(
'"', position);
307 if (
end_pos == std::string::npos) {
308 std::string str = data.substr(position);
309 position = data.size();
310 return JsonValue(str);
312 std::string str = data.substr(position,
end_pos - position);
314 return JsonValue(str);
321JsonValue JsonParser::ParseBool() {
322 if (data.compare(position, 4,
"true") == 0) {
324 return JsonValue(
true);
325 }
else if (data.compare(position, 5,
"false") == 0) {
327 return JsonValue(
false);
338JsonValue JsonParser::ParseNull() {
339 if (data.compare(position, 4,
"null") == 0) {
352JsonValue JsonParser::ParseObject() {
357 if (position < data.size() && data[position] ==
'}') {
359 return JsonValue(
obj);
362 while (position < data.size() && data[position] !=
'}') {
364 if (position >= data.size() || data[position] !=
'"') {
365 return JsonValue(
obj);
367 std::string key = ParseString().
GetString();
370 if (position >= data.size() || data[position] !=
':') {
371 return JsonValue(
obj);
375 JsonValue value = ParseValue();
379 if (position < data.size() && data[position] ==
',') {
384 if (position < data.size() && data[position] ==
'}') {
387 return JsonValue(
obj);
394JsonValue JsonParser::ParseArray() {
399 if (position < data.size() && data[position] ==
']') {
401 return JsonValue(
arr);
404 while (position < data.size() && data[position] !=
']') {
406 JsonValue value = ParseValue();
407 arr.push_back(value);
410 if (position < data.size() && data[position] ==
',') {
415 if (position < data.size() && data[position] ==
']') {
418 return JsonValue(
arr);
429 std::cerr <<
"Error: Unable to open file " <<
filename <<
" for writing."
444void JsonParser::WriteJsonValue(std::ofstream&
outputFile,
447 case JsonValueType::Null:
450 case JsonValueType::Number:
453 case JsonValueType::String:
456 case JsonValueType::Bool:
459 case JsonValueType::Object: {
473 case JsonValueType::JArray: {
477 for (
const auto& value :
arr) {
494 this->PrintJsonValue(std::cout,
jsonValue);
495 std::cout << std::endl;
505 case JsonValueType::Null:
508 case JsonValueType::Number:
511 case JsonValueType::String:
514 case JsonValueType::Bool:
517 case JsonValueType::Object: {
531 case JsonValueType::JArray: {
535 for (
const auto& value :
arr) {
540 PrintJsonValue(
output, value);
Definition fims_json.hpp:106
void Show(JsonValue jsonValue)
Definition fims_json.hpp:493
void WriteToFile(const std::string &filename, JsonValue jsonValue)
Definition fims_json.hpp:426
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:239