16#ifndef izzi_JSON_BASICS_H
17#define izzi_JSON_BASICS_H 1
23#define RAPIDJSON_HAS_STDSTRING 1
26#include "prettywriter.h"
28#include "filereadstream.h"
33#include "rapidjson/prettywriter.h"
34#include "rapidjson/pointer.h"
35#include "rapidjson/filereadstream.h"
36#include "rapidjson/reader.h"
37#include "rapidjson/document.h"
38#include "rapidjson/error/en.h"
44namespace rj = rapidjson;
55 for (
const auto&
id : ids)
57 auto [ count, name ] = id;
61 writer.String(
"number");
67 writer.String(
"count");
82 dom.Parse(json.c_str());
83 if (dom.HasParseError())
85 std::cerr <<
"error: cannot parse input string " << std::endl;
86 std::cerr << rj::GetParseError_En(dom.GetParseError()) << std::endl;
87 std::cerr << dom.GetErrorOffset() << std::endl;
98 std::ifstream ifs(input_file);
102 std::ostringstream oss;
108 std::cerr <<
"error: cannot open input file " << input_file << std::endl;
123 std::cerr <<
"error: expected document to be an object "
124 <<
"in file: "<< input_file << std::endl;
139 std::cerr <<
"error: expected document to be an array "
140 <<
"in file: "<< input_file << std::endl;
152 if (!dom.HasParseError() && dom.HasMember(finds.c_str()))
154 const rj::Value& a = dom[finds.c_str()];
156 found = a.GetString();
167 if (!dom.HasParseError() && dom.HasMember(finds.c_str()))
169 const rj::Value& a = dom[finds.c_str()];
182 const bool stringp = v.IsString();
183 const bool numberp = v.IsNumber();
184 const bool boolp = v.IsBool();
192 string s = v.GetString();
196 ret =
static_cast<double>(v.GetBool());
212 const string field1,
const string field2,
213 const bool verbosep =
true)
221 rj::Value* ap = rj::Pointer(afield.c_str()).Get(dom);
224 const rj::Value& av = *ap;
227 for (
uint j = 0; j < av.Size(); ++j)
231 const rj::Value& vssub = av[j];
232 const bool f1p = vssub.HasMember(field1.c_str());
233 const bool f2p = vssub.HasMember(field2.c_str());
236 const rj::Value& vx = vssub[field1.c_str()];
241 const rj::Value& vy = vssub[field2.c_str()];
246 ret.push_back(std::make_tuple(x, y));
249 string m(
"deserialize_json_array_object_field_n:: error ");
251 m +=
"iteration " + std::to_string(j);
256 throw std::runtime_error(
m);
double extract_dom_value_to_double(const rj::Value &v)
Extract from raw JSON value to double.
int search_dom_for_int_field(const rj::Document &dom, const string finds)
Search DOM for integer values.
rj::PrettyWriter< rj::StringBuffer > jsonstream
Aliases/using.
rj::Document deserialize_json_to_dom(const string input_file)
Deserialize input file.
rj::Document deserialize_json_to_dom_array(const string input_file)
Load JSON file to in-memory DOM array.
std::vector< point_2t > vrange
rj::Document deserialize_json_to_dom_object(const string input_file)
Load JSON file to in-memory DOM.
void serialize_id_types_json(jsonstream &writer, const auto &ids, const string tag)
Serialize set of id_type.
string search_dom_for_string_field(const rj::Document &dom, const string finds)
Search DOM for string literals.
rj::Document deserialize_json_string_to_dom(const string &json)
Deserialize input string.
vrange deserialize_json_array_object_field_n(const string jdata, const string afield, const string field1, const string field2, const bool verbosep=true)
Deserialize json array, extract specific fields from array objects, return as vec of point_2t.