|
@@ -35,50 +35,6 @@ const JSONValue JSONValue::EMPTY;
|
|
|
const JSONArray JSONValue::emptyArray;
|
|
const JSONArray JSONValue::emptyArray;
|
|
|
const JSONObject JSONValue::emptyObject;
|
|
const JSONObject JSONValue::emptyObject;
|
|
|
|
|
|
|
|
-void JSONValue::SetType(JSONValueType valueType)
|
|
|
|
|
-{
|
|
|
|
|
- if (valueType == valueType_)
|
|
|
|
|
- return;
|
|
|
|
|
-
|
|
|
|
|
- switch (valueType_)
|
|
|
|
|
- {
|
|
|
|
|
- case JSON_STRING:
|
|
|
|
|
- delete stringValue_;
|
|
|
|
|
- break;
|
|
|
|
|
-
|
|
|
|
|
- case JSON_ARRAY:
|
|
|
|
|
- delete arrayValue_;
|
|
|
|
|
- break;
|
|
|
|
|
-
|
|
|
|
|
- case JSON_OBJECT:
|
|
|
|
|
- delete objectValue_;
|
|
|
|
|
- break;
|
|
|
|
|
-
|
|
|
|
|
- default:
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- valueType_ = valueType;
|
|
|
|
|
-
|
|
|
|
|
- switch (valueType_)
|
|
|
|
|
- {
|
|
|
|
|
- case JSON_STRING:
|
|
|
|
|
- stringValue_ = new String();
|
|
|
|
|
- break;
|
|
|
|
|
-
|
|
|
|
|
- case JSON_ARRAY:
|
|
|
|
|
- arrayValue_ = new JSONArray();
|
|
|
|
|
- break;
|
|
|
|
|
-
|
|
|
|
|
- case JSON_OBJECT:
|
|
|
|
|
- objectValue_ = new JSONObject();
|
|
|
|
|
- break;
|
|
|
|
|
-
|
|
|
|
|
- default:
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
JSONValue& JSONValue::operator =(bool rhs)
|
|
JSONValue& JSONValue::operator =(bool rhs)
|
|
|
{
|
|
{
|
|
|
SetType(JSON_BOOL);
|
|
SetType(JSON_BOOL);
|
|
@@ -89,15 +45,15 @@ JSONValue& JSONValue::operator =(bool rhs)
|
|
|
|
|
|
|
|
JSONValue& JSONValue::operator =(int rhs)
|
|
JSONValue& JSONValue::operator =(int rhs)
|
|
|
{
|
|
{
|
|
|
- SetType(JSON_NUMBER);
|
|
|
|
|
- numberValue_ = rhs;
|
|
|
|
|
|
|
+ SetType(JSON_NUMBER, JSONNT_INT);
|
|
|
|
|
+ numberValue_ = rhs;
|
|
|
|
|
|
|
|
return *this;
|
|
return *this;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
JSONValue& JSONValue::operator =(unsigned rhs)
|
|
JSONValue& JSONValue::operator =(unsigned rhs)
|
|
|
{
|
|
{
|
|
|
- SetType(JSON_NUMBER);
|
|
|
|
|
|
|
+ SetType(JSON_NUMBER, JSONNT_UINT);
|
|
|
numberValue_ = rhs;
|
|
numberValue_ = rhs;
|
|
|
|
|
|
|
|
return *this;
|
|
return *this;
|
|
@@ -105,7 +61,7 @@ JSONValue& JSONValue::operator =(unsigned rhs)
|
|
|
|
|
|
|
|
JSONValue& JSONValue::operator =(float rhs)
|
|
JSONValue& JSONValue::operator =(float rhs)
|
|
|
{
|
|
{
|
|
|
- SetType(JSON_NUMBER);
|
|
|
|
|
|
|
+ SetType(JSON_NUMBER, JSONNT_FLOAT_DOUBLE);
|
|
|
numberValue_ = rhs;
|
|
numberValue_ = rhs;
|
|
|
|
|
|
|
|
return *this;
|
|
return *this;
|
|
@@ -113,7 +69,7 @@ JSONValue& JSONValue::operator =(float rhs)
|
|
|
|
|
|
|
|
JSONValue& JSONValue::operator =(double rhs)
|
|
JSONValue& JSONValue::operator =(double rhs)
|
|
|
{
|
|
{
|
|
|
- SetType(JSON_NUMBER);
|
|
|
|
|
|
|
+ SetType(JSON_NUMBER, JSONNT_FLOAT_DOUBLE);
|
|
|
numberValue_ = rhs;
|
|
numberValue_ = rhs;
|
|
|
|
|
|
|
|
return *this;
|
|
return *this;
|
|
@@ -156,9 +112,9 @@ JSONValue& JSONValue::operator =(const JSONValue& rhs)
|
|
|
if (this == &rhs)
|
|
if (this == &rhs)
|
|
|
return *this;
|
|
return *this;
|
|
|
|
|
|
|
|
- SetType(rhs.valueType_);
|
|
|
|
|
|
|
+ SetType(rhs.GetValueType(), rhs.GetNumberType());
|
|
|
|
|
|
|
|
- switch (valueType_)
|
|
|
|
|
|
|
+ switch (GetValueType())
|
|
|
{
|
|
{
|
|
|
case JSON_BOOL:
|
|
case JSON_BOOL:
|
|
|
boolValue_ = rhs.boolValue_;
|
|
boolValue_ = rhs.boolValue_;
|
|
@@ -186,6 +142,16 @@ JSONValue& JSONValue::operator =(const JSONValue& rhs)
|
|
|
return *this;
|
|
return *this;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+JSONValueType JSONValue::GetValueType() const
|
|
|
|
|
+{
|
|
|
|
|
+ return (JSONValueType)(type_ >> 16);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+JSONNumberType JSONValue::GetNumberType() const
|
|
|
|
|
+{
|
|
|
|
|
+ return (JSONNumberType)(type_ & 0xffff);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
JSONValue& JSONValue::operator [](unsigned index)
|
|
JSONValue& JSONValue::operator [](unsigned index)
|
|
|
{
|
|
{
|
|
|
// Convert to array type
|
|
// Convert to array type
|
|
@@ -196,7 +162,7 @@ JSONValue& JSONValue::operator [](unsigned index)
|
|
|
|
|
|
|
|
const JSONValue& JSONValue::operator [](unsigned index) const
|
|
const JSONValue& JSONValue::operator [](unsigned index) const
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_ARRAY)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_ARRAY)
|
|
|
return EMPTY;
|
|
return EMPTY;
|
|
|
|
|
|
|
|
return (*arrayValue_)[index];
|
|
return (*arrayValue_)[index];
|
|
@@ -212,7 +178,7 @@ void JSONValue::Push(const JSONValue& value)
|
|
|
|
|
|
|
|
void JSONValue::Pop()
|
|
void JSONValue::Pop()
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_ARRAY)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_ARRAY)
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
arrayValue_->Pop();
|
|
arrayValue_->Pop();
|
|
@@ -220,7 +186,7 @@ void JSONValue::Pop()
|
|
|
|
|
|
|
|
void JSONValue::Insert(unsigned pos, const JSONValue& value)
|
|
void JSONValue::Insert(unsigned pos, const JSONValue& value)
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_ARRAY)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_ARRAY)
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
arrayValue_->Insert(pos, value);
|
|
arrayValue_->Insert(pos, value);
|
|
@@ -228,7 +194,7 @@ void JSONValue::Insert(unsigned pos, const JSONValue& value)
|
|
|
|
|
|
|
|
void JSONValue::Erase(unsigned pos, unsigned length)
|
|
void JSONValue::Erase(unsigned pos, unsigned length)
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_ARRAY)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_ARRAY)
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
arrayValue_->Erase(pos, length);
|
|
arrayValue_->Erase(pos, length);
|
|
@@ -244,7 +210,7 @@ void JSONValue::Resize(unsigned newSize)
|
|
|
|
|
|
|
|
unsigned JSONValue::Size() const
|
|
unsigned JSONValue::Size() const
|
|
|
{
|
|
{
|
|
|
- if (valueType_ == JSON_ARRAY)
|
|
|
|
|
|
|
+ if (GetValueType() == JSON_ARRAY)
|
|
|
return arrayValue_->Size();
|
|
return arrayValue_->Size();
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -260,7 +226,7 @@ JSONValue& JSONValue::operator [](const String& key)
|
|
|
|
|
|
|
|
const JSONValue& JSONValue::operator [](const String& key) const
|
|
const JSONValue& JSONValue::operator [](const String& key) const
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_OBJECT)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_OBJECT)
|
|
|
return EMPTY;
|
|
return EMPTY;
|
|
|
|
|
|
|
|
return (*objectValue_)[key];
|
|
return (*objectValue_)[key];
|
|
@@ -276,7 +242,7 @@ void JSONValue::Set(const String& key, const JSONValue& value)
|
|
|
|
|
|
|
|
const JSONValue& JSONValue::Get(const String& key) const
|
|
const JSONValue& JSONValue::Get(const String& key) const
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_OBJECT)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_OBJECT)
|
|
|
return EMPTY;
|
|
return EMPTY;
|
|
|
|
|
|
|
|
JSONObject::ConstIterator i = objectValue_->Find(key);
|
|
JSONObject::ConstIterator i = objectValue_->Find(key);
|
|
@@ -288,7 +254,7 @@ const JSONValue& JSONValue::Get(const String& key) const
|
|
|
|
|
|
|
|
bool JSONValue::Erase(const String& key)
|
|
bool JSONValue::Erase(const String& key)
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_OBJECT)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_OBJECT)
|
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
|
return objectValue_->Erase(key);
|
|
return objectValue_->Erase(key);
|
|
@@ -296,7 +262,7 @@ bool JSONValue::Erase(const String& key)
|
|
|
|
|
|
|
|
bool JSONValue::Contains(const String& key) const
|
|
bool JSONValue::Contains(const String& key) const
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_OBJECT)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_OBJECT)
|
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
|
return objectValue_->Contains(key);
|
|
return objectValue_->Contains(key);
|
|
@@ -312,7 +278,7 @@ JSONObjectIterator JSONValue::Begin()
|
|
|
|
|
|
|
|
ConstJSONObjectIterator JSONValue::Begin() const
|
|
ConstJSONObjectIterator JSONValue::Begin() const
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_OBJECT)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_OBJECT)
|
|
|
return emptyObject.Begin();
|
|
return emptyObject.Begin();
|
|
|
|
|
|
|
|
return objectValue_->Begin();
|
|
return objectValue_->Begin();
|
|
@@ -328,7 +294,7 @@ JSONObjectIterator JSONValue::End()
|
|
|
|
|
|
|
|
ConstJSONObjectIterator JSONValue::End() const
|
|
ConstJSONObjectIterator JSONValue::End() const
|
|
|
{
|
|
{
|
|
|
- if (valueType_ != JSON_OBJECT)
|
|
|
|
|
|
|
+ if (GetValueType() != JSON_OBJECT)
|
|
|
return emptyObject.End();
|
|
return emptyObject.End();
|
|
|
|
|
|
|
|
return objectValue_->End();
|
|
return objectValue_->End();
|
|
@@ -336,10 +302,285 @@ ConstJSONObjectIterator JSONValue::End() const
|
|
|
|
|
|
|
|
void JSONValue::Clear()
|
|
void JSONValue::Clear()
|
|
|
{
|
|
{
|
|
|
- if (valueType_ == JSON_ARRAY)
|
|
|
|
|
|
|
+ if (GetValueType() == JSON_ARRAY)
|
|
|
arrayValue_->Clear();
|
|
arrayValue_->Clear();
|
|
|
- else if (valueType_ == JSON_OBJECT)
|
|
|
|
|
|
|
+ else if (GetValueType() == JSON_OBJECT)
|
|
|
objectValue_->Clear();
|
|
objectValue_->Clear();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void JSONValue::SetType(JSONValueType valueType, JSONNumberType numberType)
|
|
|
|
|
+{
|
|
|
|
|
+ int type = (valueType << 16) | numberType;
|
|
|
|
|
+ if (type == type_)
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ switch (GetValueType())
|
|
|
|
|
+ {
|
|
|
|
|
+ case JSON_STRING:
|
|
|
|
|
+ delete stringValue_;
|
|
|
|
|
+ break;
|
|
|
|
|
+
|
|
|
|
|
+ case JSON_ARRAY:
|
|
|
|
|
+ delete arrayValue_;
|
|
|
|
|
+ break;
|
|
|
|
|
+
|
|
|
|
|
+ case JSON_OBJECT:
|
|
|
|
|
+ delete objectValue_;
|
|
|
|
|
+ break;
|
|
|
|
|
+
|
|
|
|
|
+ default:
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ type_ = type;
|
|
|
|
|
+
|
|
|
|
|
+ switch (GetValueType())
|
|
|
|
|
+ {
|
|
|
|
|
+ case JSON_STRING:
|
|
|
|
|
+ stringValue_ = new String();
|
|
|
|
|
+ break;
|
|
|
|
|
+
|
|
|
|
|
+ case JSON_ARRAY:
|
|
|
|
|
+ arrayValue_ = new JSONArray();
|
|
|
|
|
+ break;
|
|
|
|
|
+
|
|
|
|
|
+ case JSON_OBJECT:
|
|
|
|
|
+ objectValue_ = new JSONObject();
|
|
|
|
|
+ break;
|
|
|
|
|
+
|
|
|
|
|
+ default:
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void JSONValue::SetVariant(const Variant& variant, Context* context)
|
|
|
|
|
+{
|
|
|
|
|
+ if (!IsNull())
|
|
|
|
|
+ {
|
|
|
|
|
+ LOGWARNING("JsonValue is not null");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ (*this)["type"] = variant.GetTypeName();
|
|
|
|
|
+ (*this)["value"].SetVariantValue(variant, context);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void JSONValue::GetVariant(Variant& variant) const
|
|
|
|
|
+{
|
|
|
|
|
+ VariantType type = Variant::GetTypeFromName((*this)["type"].GetString());
|
|
|
|
|
+ (*this)["value"].GetVariantValue(variant, type);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void JSONValue::SetVariantValue(const Variant& variant, Context* context)
|
|
|
|
|
+{
|
|
|
|
|
+ if (!IsNull())
|
|
|
|
|
+ {
|
|
|
|
|
+ LOGWARNING("JsonValue is not null");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ switch (variant.GetType())
|
|
|
|
|
+ {
|
|
|
|
|
+ case VAR_BOOL:
|
|
|
|
|
+ *this = variant.GetBool();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_INT:
|
|
|
|
|
+ *this = variant.GetInt();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_FLOAT:
|
|
|
|
|
+ *this = variant.GetFloat();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_DOUBLE:
|
|
|
|
|
+ *this = variant.GetDouble();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_STRING:
|
|
|
|
|
+ *this = variant.GetString();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_VARIANTVECTOR:
|
|
|
|
|
+ SetVariantVector(variant.GetVariantVector(), context);
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_VARIANTMAP:
|
|
|
|
|
+ SetVariantMap(variant.GetVariantMap(), context);
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_RESOURCEREF:
|
|
|
|
|
+ {
|
|
|
|
|
+ if (!context)
|
|
|
|
|
+ {
|
|
|
|
|
+ LOGERROR("Context must not null for ResourceRef");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const ResourceRef& ref = variant.GetResourceRef();
|
|
|
|
|
+ *this = String(context->GetTypeName(ref.type_)) + ";" + ref.name_;
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_RESOURCEREFLIST:
|
|
|
|
|
+ {
|
|
|
|
|
+ if (!context)
|
|
|
|
|
+ {
|
|
|
|
|
+ LOGERROR("Context must not null for ResourceRefList");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const ResourceRefList& refList = variant.GetResourceRefList();
|
|
|
|
|
+ String str(context->GetTypeName(refList.type_));
|
|
|
|
|
+ for (unsigned i = 0; i < refList.names_.Size(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ str += ";";
|
|
|
|
|
+ str += refList.names_[i];
|
|
|
|
|
+ }
|
|
|
|
|
+ *this = str;
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_STRINGVECTOR:
|
|
|
|
|
+ {
|
|
|
|
|
+ const StringVector& vector = variant.GetStringVector();
|
|
|
|
|
+ Resize(vector.Size());
|
|
|
|
|
+ for (unsigned i = 0; i < vector.Size(); ++i)
|
|
|
|
|
+ (*this)[i] = vector[i];
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ default:
|
|
|
|
|
+ *this = variant.ToString();
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void JSONValue::GetVariantValue(Variant& variant, VariantType type) const
|
|
|
|
|
+{
|
|
|
|
|
+ switch (type)
|
|
|
|
|
+ {
|
|
|
|
|
+ case VAR_BOOL:
|
|
|
|
|
+ variant = GetBool();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_INT:
|
|
|
|
|
+ variant = GetInt();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_FLOAT:
|
|
|
|
|
+ variant = GetFloat();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_DOUBLE:
|
|
|
|
|
+ variant = GetDouble();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_STRING:
|
|
|
|
|
+ variant = GetString();
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_VARIANTVECTOR:
|
|
|
|
|
+ {
|
|
|
|
|
+ VariantVector vector;
|
|
|
|
|
+ GetVariantVector(vector);
|
|
|
|
|
+ variant = vector;
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_VARIANTMAP:
|
|
|
|
|
+ {
|
|
|
|
|
+ VariantMap map;
|
|
|
|
|
+ GetVariantMap(map);
|
|
|
|
|
+ variant = map;
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_RESOURCEREF:
|
|
|
|
|
+ {
|
|
|
|
|
+ ResourceRef ref;
|
|
|
|
|
+ Vector<String> values = GetString().Split(';');
|
|
|
|
|
+ if (values.Size() == 2)
|
|
|
|
|
+ {
|
|
|
|
|
+ ref.type_ = values[0];
|
|
|
|
|
+ ref.name_ = values[1];
|
|
|
|
|
+ }
|
|
|
|
|
+ variant = ref;
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_RESOURCEREFLIST:
|
|
|
|
|
+ {
|
|
|
|
|
+ ResourceRefList refList;
|
|
|
|
|
+ Vector<String> values = GetString().Split(';');
|
|
|
|
|
+ if (values.Size() >= 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ refList.type_ = values[0];
|
|
|
|
|
+ refList.names_.Resize(values.Size() - 1);
|
|
|
|
|
+ for (unsigned i = 1; i < values.Size(); ++i)
|
|
|
|
|
+ refList.names_[i - 1] = values[i];
|
|
|
|
|
+ }
|
|
|
|
|
+ variant = refList;
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ case VAR_STRINGVECTOR:
|
|
|
|
|
+ {
|
|
|
|
|
+ StringVector vector;
|
|
|
|
|
+ for (unsigned i = 0; i < Size(); ++i)
|
|
|
|
|
+ vector.Push((*this)[i].GetString());
|
|
|
|
|
+ variant = vector;
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ default:
|
|
|
|
|
+ variant.FromString(type, GetString());
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void JSONValue::SetVariantMap(const VariantMap& variantMap, Context* context)
|
|
|
|
|
+{
|
|
|
|
|
+ SetType(JSON_OBJECT);
|
|
|
|
|
+ for (VariantMap::ConstIterator i = variantMap.Begin(); i != variantMap.End(); ++i)
|
|
|
|
|
+ (*this)[i->first_.ToString()].SetVariant(i->second_);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void JSONValue::GetVariantMap(VariantMap& variantMap) const
|
|
|
|
|
+{
|
|
|
|
|
+ if (!IsObject())
|
|
|
|
|
+ {
|
|
|
|
|
+ LOGERROR("JSONValue is not a object");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for (ConstJSONObjectIterator i = Begin(); i != End(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ StringHash key(ToUInt(i->first_));
|
|
|
|
|
+ Variant variant;
|
|
|
|
|
+ i->second_.GetVariant(variant);
|
|
|
|
|
+ variantMap[key] = variant;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void JSONValue::SetVariantVector(const VariantVector& variantVector, Context* context)
|
|
|
|
|
+{
|
|
|
|
|
+ SetType(JSON_ARRAY);
|
|
|
|
|
+ for (unsigned i = 0; i < variantVector.Size(); ++i)
|
|
|
|
|
+ (*this)[i].SetVariant(variantVector[i]);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void JSONValue::GetVariantVector(VariantVector& variantVector) const
|
|
|
|
|
+{
|
|
|
|
|
+ if (!IsArray())
|
|
|
|
|
+ {
|
|
|
|
|
+ LOGERROR("JSONValue is not a array");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for (unsigned i = 0; i < Size(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ Variant variant;
|
|
|
|
|
+ (*this)[i].GetVariant(variant);
|
|
|
|
|
+ variantVector.Push(variant);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
}
|
|
}
|