reference

This documentation is automatically generated from the openFrameworks source code using doxygen and refers to the most recent release, version 0.12.0.

ofJson.h
Go to the documentation of this file.
1#pragma once
2
3#if !defined(TARGET_MINGW)
4 #include "json.hpp"
5#else
6 #include "nlohmann/json.hpp" // MSYS2 : use of system-installed include
7#endif
8#include "ofParameter.h"
9
10// for convenience
11using ofJson = nlohmann::json;
12
13
17inline ofJson ofLoadJson(const of::filesystem::path& filename){
18 ofJson json;
19 ofFile jsonFile(filename);
20 if(jsonFile.exists()){
21 try{
22 jsonFile >> json;
23 }catch(std::exception & e){
24 ofLogError("ofLoadJson") << "Error loading json from " << filename.string() << ": " << e.what();
25 }catch(...){
26 ofLogError("ofLoadJson") << "Error loading json from " << filename.string();
27 }
28 }else{
29 ofLogError("ofLoadJson") << "Error loading json from " << filename.string() << ": file doesn't exist";
30 }
31 return json;
32}
33
38inline bool ofSaveJson(const of::filesystem::path& filename, const ofJson & json){
39 ofFile jsonFile(filename, ofFile::WriteOnly);
40 try{
41 jsonFile << json;
42 }catch(std::exception & e){
43 ofLogError("ofSaveJson") << "Error saving json to " << filename.string() << ": " << e.what();
44 return false;
45 }catch(...){
46 ofLogError("ofSaveJson") << "Error saving json to " << filename.string();
47 return false;
48 }
49 return true;
50}
51
56inline bool ofSavePrettyJson(const of::filesystem::path& filename, const ofJson & json){
57 ofFile jsonFile(filename, ofFile::WriteOnly);
58 try{
59 jsonFile << json.dump(4);
60 }catch(std::exception & e){
61 ofLogError("ofSavePrettyJson") << "Error saving json to " << filename.string() << ": " << e.what();
62 return false;
63 }catch(...){
64 ofLogError("ofSavePrettyJson") << "Error saving json to " << filename.string();
65 return false;
66 }
67 return true;
68}
69
70inline void ofSerialize(ofJson & js, const ofAbstractParameter & parameter){
71 if(!parameter.isSerializable()){
72 return;
73 }
74 std::string name = parameter.getEscapedName();
75 if(name == ""){
76 name = "UnknownName";
77 }
78 if(parameter.type() == typeid(ofParameterGroup).name()){
79 const ofParameterGroup & group = static_cast <const ofParameterGroup &>(parameter);
80 auto jsonGroup = js[name];
81 for(auto & p: group){
82 ofSerialize(jsonGroup, *p);
83 }
84 js[name] = jsonGroup;
85 }else{
86 std::string value = parameter.toString();
87 js[name] = value;
88 }
89}
90
91inline void ofDeserialize(const ofJson & json, ofAbstractParameter & parameter){
92 if(!parameter.isSerializable()){
93 return;
94 }
95 std::string name = parameter.getEscapedName();
96 if(json.find(name) != json.end()){
97 if(parameter.type() == typeid(ofParameterGroup).name()){
98 ofParameterGroup & group = static_cast <ofParameterGroup &>(parameter);
99 for(auto & p: group){
100 ofDeserialize(json[name], *p);
101 }
102 }else{
103 if(parameter.type() == typeid(ofParameter <int> ).name() && json[name].is_number_integer()){
104 parameter.cast <int>() = json[name].get<int>();
105 }else if(parameter.type() == typeid(ofParameter <float> ).name() && json[name].is_number_float()){
106 parameter.cast <float>() = json[name].get<float>();
107 }else if(parameter.type() == typeid(ofParameter <bool> ).name() && json[name].is_boolean()){
108 parameter.cast <bool>() = json[name].get<bool>();
109 }else if(parameter.type() == typeid(ofParameter <int64_t> ).name() && json[name].is_number_integer()){
110 parameter.cast <int64_t>() = json[name].get<int64_t>();
111 }else if(parameter.type() == typeid(ofParameter <std::string> ).name()){
112 parameter.cast <std::string>() = json[name].get<std::string>();
113 }else{
114 parameter.fromString(json[name]);
115 }
116 }
117 }
118}
Base class for ofParameter, ofReadOnlyParameter and ofParameterGroup.
Definition ofParameter.h:24
virtual std::string toString() const =0
virtual std::string type() const
Definition ofParameter.cpp:34
virtual std::string getEscapedName() const
Definition ofParameter.cpp:6
virtual bool isSerializable() const =0
virtual void fromString(const std::string &str)=0
ofParameter< ParameterType > & cast()
Definition ofParameter.h:40
Definition ofFileUtils.h:472
bool exists() const
Definition ofFileUtils.cpp:643
@ WriteOnly
Definition ofFileUtils.h:480
Derived log class for easy error logging.
Definition ofLog.h:606
Definition ofParameter.h:84
void ofSerialize(ofJson &js, const ofAbstractParameter &parameter)
Definition ofJson.h:70
void ofDeserialize(const ofJson &json, ofAbstractParameter &parameter)
Definition ofJson.h:91
nlohmann::json ofJson
Definition ofJson.h:11
bool ofSavePrettyJson(const of::filesystem::path &filename, const ofJson &json)
Save "pretty" indented Json to the given path.
Definition ofJson.h:56
ofJson ofLoadJson(const of::filesystem::path &filename)
Load Json from the given path.
Definition ofJson.h:17
bool ofSaveJson(const of::filesystem::path &filename, const ofJson &json)
Save minified Json to the given path.
Definition ofJson.h:38