44 #ifndef __CU_JSON_VALUE_H__
45 #define __CU_JSON_VALUE_H__
46 #include <cugl/base/CUBase.h>
47 #include <cJSON/cJSON.h>
103 std::string _stringValue;
110 std::vector<std::shared_ptr<JsonValue>> _children;
113 #pragma mark cJSON Conversions
127 static std::shared_ptr<JsonValue> toJsonValue(
const cJSON* node);
140 static void toJsonValue(
JsonValue* value,
const cJSON* node);
153 static cJSON* toCJSON(
const JsonValue* value);
156 #pragma mark Constructors
194 bool init(
const std::string& value);
205 bool init(
const char* value) {
return init(std::string(value)); }
216 bool init(
bool value);
227 bool init(
long value);
238 bool init(
double value);
309 #pragma mark Static Constructors
320 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
321 return (result->init(type) ? result :
nullptr);
333 static std::shared_ptr<JsonValue>
alloc(
const std::string& value) {
334 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
335 return (result->init(value) ? result :
nullptr);
347 static std::shared_ptr<JsonValue>
alloc(
const char* value) {
348 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
349 return (result->init(value) ? result :
nullptr);
361 static std::shared_ptr<JsonValue>
alloc(
bool value) {
362 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
363 return (result->init(value) ? result :
nullptr);
375 static std::shared_ptr<JsonValue>
alloc(
long value) {
376 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
377 return (result->init(value) ? result :
nullptr);
389 static std::shared_ptr<JsonValue>
alloc(
double value) {
390 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
391 return (result->init(value) ? result :
nullptr);
402 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
403 return (result->initNull() ? result :
nullptr);
415 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
416 return (result->initArray() ? result :
nullptr);
428 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
429 return (result->initObject() ? result :
nullptr);
449 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
450 return (result->initWithJson(json) ? result :
nullptr);
470 std::shared_ptr<JsonValue> result = std::make_shared<JsonValue>();
471 return (result->initWithJson(json) ? result :
nullptr);
541 #pragma mark Value Access
552 const std::string
asString(
const std::string& defaultValue)
const {
553 return asString(defaultValue.c_str());
566 const std::string
asString(
const char* defaultValue=
"")
const;
578 float asFloat(
float defaultValue=0.0f)
const;
590 double asDouble(
double defaultValue=0.0)
const;
602 long asLong(
long defaultValue=0L)
const;
614 int asInt(
int defaultValue=0)
const;
627 bool asBool(
bool defaultValue=
false)
const;
640 std::vector<std::string>
asStringArray(
const std::string& defaultValue)
const;
668 std::vector<float>
asFloatArray(
float defaultValue=0.0f)
const;
681 std::vector<double>
asDoubleArray(
double defaultValue=0.0)
const;
694 std::vector<long>
asLongArray(
long defaultValue=0L)
const;
707 std::vector<int>
asIntArray(
int defaultValue=0)
const;
720 std::vector<bool>
asBoolArray (
bool defaultValue=
false);
724 #pragma mark Value Modification
733 void set(
const std::string& value);
743 void set(
const char* value) {
744 set(std::string(value));
755 void set(
long value);
765 void set(
double value);
775 void set(
bool value);
787 #pragma mark Child Access
796 const std::string&
key()
const;
825 const int index()
const;
832 size_t size()
const {
return _children.size(); }
843 bool has(
const std::string& name)
const;
854 bool has(
const char* name)
const {
855 return has(std::string(name));
868 std::shared_ptr<JsonValue>
get(
int index);
880 const std::shared_ptr<JsonValue>
get(
int index)
const;
894 std::shared_ptr<JsonValue>
get(
const std::string& name);
908 const std::shared_ptr<JsonValue>
get(
const std::string& name)
const;
922 std::shared_ptr<JsonValue>
get(
const char* name) {
923 return get(std::string(name));
938 const std::shared_ptr<JsonValue>
get(
const char* name)
const {
939 return get(std::string(name));
944 #pragma mark Child Values
958 const std::string
getString (
const std::string&
key,
const std::string& defaultValue)
const;
973 const std::string
getString (
const char*
key,
const char* defaultValue=
"")
const {
974 return getString(std::string(key),std::string(defaultValue));
990 const std::string
getString (
const std::string&
key,
const char* defaultValue=
"")
const {
991 return getString(key,std::string(defaultValue));
1007 const std::string
getString (
const char*
key,
const std::string& defaultValue)
const {
1008 return getString(std::string(key),defaultValue);
1024 float getFloat(
const std::string&
key,
float defaultValue=0.0f)
const;
1040 return getFloat(std::string(key),defaultValue);
1056 double getDouble(
const std::string&
key,
double defaultValue=0.0)
const;
1072 return getDouble(std::string(key),defaultValue);
1088 long getLong(
const std::string&
key,
long defaultValue=0L)
const;
1104 return getLong(std::string(key),defaultValue);
1120 int getInt(
const std::string&
key,
int defaultValue=0)
const;
1136 return getInt(std::string(key),defaultValue);
1152 bool getBool(
const std::string&
key,
bool defaultValue=
false)
const;
1168 return getBool(std::string(key),defaultValue);
1172 #pragma mark Child Deletion
1199 std::shared_ptr<JsonValue>
removeChild(
const std::string& name);
1218 #pragma mark Child Addition
1233 void appendChild(
const std::shared_ptr<JsonValue>& child);
1251 void appendChild(
const std::string&
key,
const std::shared_ptr<JsonValue>& child);
1289 void insertChild(
unsigned int index,
const std::shared_ptr<JsonValue>& child);
1309 void insertChild(
unsigned int index,
const std::string&
key,
const std::shared_ptr<JsonValue>& child);
2131 #pragma mark Encoding
2147 std::string
toString(
bool format=
true)
const;
void insertNull(unsigned int index)
Definition: CUJsonValue.h:1899
bool getBool(const std::string &key, bool defaultValue=false) const
void insertValue(unsigned int index, const std::string &key, long value)
Definition: CUJsonValue.h:1514
bool has(const std::string &name) const
const std::string getString(const std::string &key, const char *defaultValue="") const
Definition: CUJsonValue.h:990
int getInt(const char *key, int defaultValue=0) const
Definition: CUJsonValue.h:1135
void appendValue(const std::string &key, const std::string &value)
Definition: CUJsonValue.h:1680
static std::shared_ptr< JsonValue > alloc(const char *value)
Definition: CUJsonValue.h:347
void appendObject(const std::string &key)
Definition: CUJsonValue.h:2058
void insertValue(unsigned int index, const std::string &key, const char *value)
Definition: CUJsonValue.h:1801
static std::shared_ptr< JsonValue > allocArray()
Definition: CUJsonValue.h:414
void appendArray(const char *key)
Definition: CUJsonValue.h:1979
static std::shared_ptr< JsonValue > allocNull()
Definition: CUJsonValue.h:401
void insertObject(unsigned int index, const std::string &key)
Definition: CUJsonValue.h:2107
static std::shared_ptr< JsonValue > alloc(const std::string &value)
Definition: CUJsonValue.h:333
void appendValue(const std::string &key, bool value)
Definition: CUJsonValue.h:1360
static std::shared_ptr< JsonValue > alloc(bool value)
Definition: CUJsonValue.h:361
void insertValue(unsigned int index, const std::string &key, const std::string &value)
Definition: CUJsonValue.h:1782
void insertValue(unsigned int index, const std::string &key, bool value)
Definition: CUJsonValue.h:1412
float getFloat(const char *key, float defaultValue=0.0f) const
Definition: CUJsonValue.h:1039
static std::shared_ptr< JsonValue > alloc(Type type)
Definition: CUJsonValue.h:319
bool asBool(bool defaultValue=false) const
bool initArray()
Definition: CUJsonValue.h:257
void appendValue(const char *value)
Definition: CUJsonValue.h:1663
bool isNumber() const
Definition: CUJsonValue.h:496
static std::shared_ptr< JsonValue > alloc(double value)
Definition: CUJsonValue.h:389
std::string toString(bool format=true) const
void insertValue(unsigned int index, const std::string &key, double value)
Definition: CUJsonValue.h:1616
long getLong(const std::string &key, long defaultValue=0L) const
void appendValue(const char *key, double value)
Definition: CUJsonValue.h:1581
void appendArray(const std::string &key)
Definition: CUJsonValue.h:1963
void setKey(const char *key)
Definition: CUJsonValue.h:816
void insertValue(unsigned int index, const char *key, double value)
Definition: CUJsonValue.h:1635
std::vector< float > asFloatArray(float defaultValue=0.0f) const
const std::string & key() const
void appendNull(const std::string &key)
Definition: CUJsonValue.h:1868
bool init(const char *value)
Definition: CUJsonValue.h:205
bool initObject()
Definition: CUJsonValue.h:267
void appendNull(const char *key)
Definition: CUJsonValue.h:1884
void insertValue(unsigned int index, const char *key, bool value)
Definition: CUJsonValue.h:1431
std::vector< long > asLongArray(long defaultValue=0L) const
void appendValue(long value)
Definition: CUJsonValue.h:1445
bool isString() const
Definition: CUJsonValue.h:510
void set(const std::string &value)
void insertValue(unsigned int index, bool value)
Definition: CUJsonValue.h:1393
static std::shared_ptr< JsonValue > allocObject()
Definition: CUJsonValue.h:427
void appendValue(const std::string &key, double value)
Definition: CUJsonValue.h:1564
int getInt(const std::string &key, int defaultValue=0) const
bool isArray() const
Definition: CUJsonValue.h:527
long asLong(long defaultValue=0L) const
void appendChild(const std::shared_ptr< JsonValue > &child)
std::vector< bool > asBoolArray(bool defaultValue=false)
void insertValue(unsigned int index, const char *key, const std::string &value)
Definition: CUJsonValue.h:1820
static std::shared_ptr< JsonValue > alloc(long value)
Definition: CUJsonValue.h:375
void insertValue(unsigned int index, const char *key, const char *value)
Definition: CUJsonValue.h:1839
const std::string getString(const std::string &key, const std::string &defaultValue) const
Definition: CUJsonValue.h:69
void insertObject(unsigned int index)
Definition: CUJsonValue.h:2089
void insertValue(unsigned int index, const std::string &value)
Definition: CUJsonValue.h:1747
int asInt(int defaultValue=0) const
size_t size() const
Definition: CUJsonValue.h:832
void appendValue(const char *key, bool value)
Definition: CUJsonValue.h:1377
void appendArray()
Definition: CUJsonValue.h:1947
void appendValue(const std::string &key, long value)
Definition: CUJsonValue.h:1462
bool has(const char *name) const
Definition: CUJsonValue.h:854
bool isBool() const
Definition: CUJsonValue.h:503
void appendValue(const std::string &value)
Definition: CUJsonValue.h:1649
void appendObject()
Definition: CUJsonValue.h:2042
void insertNull(unsigned int index, const std::string &key)
Definition: CUJsonValue.h:1917
const std::string getString(const char *key, const std::string &defaultValue) const
Definition: CUJsonValue.h:1007
static std::shared_ptr< JsonValue > allocWithJson(const std::string &json)
Definition: CUJsonValue.h:448
const std::string asString(const std::string &defaultValue) const
Definition: CUJsonValue.h:552
void insertChild(unsigned int index, const std::shared_ptr< JsonValue > &child)
void set(const char *value)
Definition: CUJsonValue.h:743
Type
Definition: CUJsonValue.h:78
std::shared_ptr< JsonValue > removeChild(const char *name)
Definition: CUJsonValue.h:1213
void appendNull()
Definition: CUJsonValue.h:1852
void setKey(const std::string &key)
std::vector< double > asDoubleArray(double defaultValue=0.0) const
double getDouble(const char *key, double defaultValue=0.0) const
Definition: CUJsonValue.h:1071
std::vector< int > asIntArray(int defaultValue=0) const
void insertValue(unsigned int index, double value)
Definition: CUJsonValue.h:1597
std::vector< std::string > asStringArray(const std::string &defaultValue) const
void appendValue(bool value)
Definition: CUJsonValue.h:1343
void appendValue(const char *key, long value)
Definition: CUJsonValue.h:1479
std::vector< std::string > asStringArray(const char *defaultValue="") const
Definition: CUJsonValue.h:653
static std::shared_ptr< JsonValue > allocWithJson(const char *json)
Definition: CUJsonValue.h:469
float getFloat(const std::string &key, float defaultValue=0.0f) const
void appendValue(double value)
Definition: CUJsonValue.h:1547
void insertValue(unsigned int index, const char *value)
Definition: CUJsonValue.h:1763
void appendValue(const std::string &key, const char *value)
Definition: CUJsonValue.h:1697
bool getBool(const char *key, bool defaultValue=false) const
Definition: CUJsonValue.h:1167
void insertNull(unsigned int index, const char *key)
Definition: CUJsonValue.h:1935
bool initNull()
Definition: CUJsonValue.h:247
Definition: CUAction.h:51
const std::string getString(const char *key, const char *defaultValue="") const
Definition: CUJsonValue.h:973
void insertArray(unsigned int index)
Definition: CUJsonValue.h:1994
void insertChild(unsigned int index, const char *key, const std::shared_ptr< JsonValue > &child)
Definition: CUJsonValue.h:1329
long getLong(const char *key, long defaultValue=0L) const
Definition: CUJsonValue.h:1103
Type type() const
Definition: CUJsonValue.h:482
double asDouble(double defaultValue=0.0) const
void appendValue(const char *key, const std::string &value)
Definition: CUJsonValue.h:1714
std::shared_ptr< JsonValue > removeChild(int index)
bool isObject() const
Definition: CUJsonValue.h:537
void appendValue(const char *key, const char *value)
Definition: CUJsonValue.h:1731
void insertArray(unsigned int index, const std::string &key)
Definition: CUJsonValue.h:2012
bool isNull() const
Definition: CUJsonValue.h:489
void insertValue(unsigned int index, long value)
Definition: CUJsonValue.h:1495
void insertValue(unsigned int index, const char *key, long value)
Definition: CUJsonValue.h:1533
double getDouble(const std::string &key, double defaultValue=0.0) const
bool initWithJson(const std::string &json)
Definition: CUJsonValue.h:285
void appendChild(const char *key, const std::shared_ptr< JsonValue > &child)
Definition: CUJsonValue.h:1269
float asFloat(float defaultValue=0.0f) const
void insertObject(unsigned int index, const char *key)
Definition: CUJsonValue.h:2125
void appendObject(const char *key)
Definition: CUJsonValue.h:2074
void insertArray(unsigned int index, const char *key)
Definition: CUJsonValue.h:2030