8 #include "IJsonConvertibleIO.h"
15 #include <json/json.h>
20 #include <unordered_map>
27 static const std::unordered_map<
29 std::function<bool(
const std::string &,
31 file_extension_to_ijsonconvertible_read_function{
35 static const std::unordered_map<
37 std::function<bool(
const std::string &,
39 file_extension_to_ijsonconvertible_write_function{
43 bool ReadIJsonConvertibleFromJSONStream(
44 std::istream &json_stream,
47 Json::CharReaderBuilder builder;
48 builder[
"collectComments"] =
false;
50 bool is_parse_successful =
51 parseFromStream(builder, json_stream, &root_object, &errs);
52 if (!is_parse_successful) {
56 return object.ConvertFromJsonValue(root_object);
59 bool WriteIJsonConvertibleToJSONStream(
60 std::ostream &json_stream,
63 if (
object.ConvertToJsonValue(root_object) ==
false) {
66 Json::StreamWriterBuilder builder;
67 builder[
"commentStyle"] =
"None";
68 builder[
"indentation"] =
"\t";
69 auto writer = builder.newStreamWriter();
70 writer->write(root_object, &json_stream);
82 if (file_in.is_open() ==
false) {
87 bool success = ReadIJsonConvertibleFromJSONStream(file_in,
object);
96 if (file_out.is_open() ==
false) {
101 bool success = WriteIJsonConvertibleToJSONStream(file_out,
object);
107 const std::string &json_string,
109 std::istringstream iss(json_string);
110 return ReadIJsonConvertibleFromJSONStream(iss,
object);
114 std::string &json_string,
116 std::ostringstream oss;
117 bool success = WriteIJsonConvertibleToJSONStream(oss,
object);
118 json_string = oss.str();
124 std::string filename_ext =
127 if (filename_ext.empty()) {
129 "Read utility::IJsonConvertible failed: unknown file "
134 file_extension_to_ijsonconvertible_read_function.find(filename_ext);
135 if (map_itr == file_extension_to_ijsonconvertible_read_function.end()) {
137 "Read utility::IJsonConvertible failed: unknown file "
141 return map_itr->second(
filename,
object);
147 std::string filename_ext =
150 if (filename_ext.empty()) {
152 "Write utility::IJsonConvertible failed: unknown file "
156 auto map_itr = file_extension_to_ijsonconvertible_write_function.find(
158 if (map_itr == file_extension_to_ijsonconvertible_write_function.end()) {
160 "Write utility::IJsonConvertible failed: unknown file "
164 return map_itr->second(
filename,
object);
bool ReadIJsonConvertibleFromJSONString(const std::string &json_string, cloudViewer::utility::IJsonConvertible &object)
bool WriteIJsonConvertible(const std::string &filename, const cloudViewer::utility::IJsonConvertible &object)
bool WriteIJsonConvertibleToJSONString(std::string &json_string, const cloudViewer::utility::IJsonConvertible &object)
bool WriteIJsonConvertibleToJSON(const std::string &filename, const cloudViewer::utility::IJsonConvertible &object)
bool ReadIJsonConvertibleFromJSON(const std::string &filename, cloudViewer::utility::IJsonConvertible &object)
bool ReadIJsonConvertible(const std::string &filename, cloudViewer::utility::IJsonConvertible &object)
std::string GetFileExtensionInLowerCase(const std::string &filename)
Generic file read and write utility for python interface.
static vtkPVTrivialProducerStaticInternal Value