void json2tvalue(QVariant & output, const rapidjson::Value & input, int itype) { if(input.IsNull()) { output.clear(); } else if(input.IsInt64()) { output = QVariant(input.GetInt64()); } else if(input.IsInt()) { output = QVariant(input.GetInt()); } else if(input.IsDouble()) { output = QVariant(input.GetDouble()); } else if(input.IsBool()) { output = QVariant(input.GetBool()); } else if(input.IsString()) { output = QVariant(QString(input.GetString())); } else if(input.IsArray()) { switch(itype) { case QVariant::Point: { assert(input.Size() == 2); output = QPoint(input[0u].GetDouble(), input[1].GetDouble()); break; } case QVariant::PointF: { assert(input.Size() == 2); output = QPointF(input[0u].GetDouble(), input[1].GetDouble()); break; } case QVariant::Size: { assert(input.Size() == 2); output = QSize(input[0u].GetDouble(), input[1].GetDouble()); break; } case QVariant::SizeF: { assert(input.Size() == 2); output = QSizeF(input[0u].GetDouble(), input[1].GetDouble()); break; } case QVariant::Rect: { assert(input.Size() == 4); output = QRect(input[0u].GetDouble(), input[1].GetDouble(), input[2].GetDouble(), input[3].GetDouble()); break; } case QVariant::RectF: { assert(input.Size() == 4); output = QRectF(input[0u].GetDouble(), input[1].GetDouble(), input[2].GetDouble(), input[3].GetDouble()); break; } case QVariant::Vector2D: { assert(input.Size() == 2); output = QVector2D(input[0u].GetDouble(), input[1].GetDouble()); break; } case QVariant::Vector3D: { assert(input.Size() == 3); output = QVector3D(input[0u].GetDouble(), input[1].GetDouble(), input[2].GetDouble()); break; } case QVariant::Vector4D: { assert(input.Size() == 4); output = QVector4D(input[0u].GetDouble(), input[1].GetDouble(), input[2].GetDouble(), input[3].GetDouble()); break; } case QVariant::Color: { assert(input.Size() == 4); output = QColor(input[0u].GetDouble(), input[1].GetDouble(), input[2].GetDouble(), input[3].GetDouble()); break; } case QVariant::StringList: { QStringList list; list.reserve(input.Size()); for(rapidjson::Value::ConstValueIterator it = input.Begin(); it != input.End(); ++it) { QString tmp(it->GetString()); list.append(tmp); } output = list; break; } case QVariant::List: default: { QList<QVariant> list; list.reserve(input.Size()); for(rapidjson::SizeType i = 0; i < input.Size(); ++i) { QVariant tmp; json2tvalue(tmp, input[i], QVariant::Invalid); list.append(tmp); } output = list; break; } } } else if(input.IsObject()) { QMap<QString, QVariant> map; for(rapidjson::Value::ConstMemberIterator it= input.MemberBegin(); it != input.MemberEnd(); ++it) { QString qstring(QLatin1String(it->name.GetString(), it->name.GetStringLength())); QVariant qvalue; json2tvalue(qvalue, it->value, QVariant::Invalid); map.insert(qstring, qvalue); } output = map; } else { output.clear(); assert(false && "shouldn't execute to here."); } }
bool MultitypeVar::readFromValue(const rapidjson::Value& obj) { if (obj.IsNull()) { mType = MultitypeNull; } else if (obj.IsBool()) { mType = MultitypeBool; mBool = obj.GetBool(); } else if (obj.IsNumber()) { mType = MultitypeNumber; mNumber = obj.GetDouble(); } else if (obj.IsString()) { mType = MultitypeNumber; mString = obj.GetString(); } else { mType = MultitypeNull; return false; } return true; }
EdgeCost InputUtils::impl::VA::getEdgeCostFromValue( const rapidjson::Value& edgeCost) { if (edgeCost.IsString()) { return std::atoll(edgeCost.GetString()); } else { return edgeCost.GetDouble(); } }
VertexIdx InputUtils::impl::VA::getVertexIdxFromValue( const rapidjson::Value& vertexIdx) { if (vertexIdx.IsString()) { return (VertexIdx) std::atoll(vertexIdx.GetString()); } else { return vertexIdx.GetDouble(); } }
// Convert rapidjson value to JSON value. static void ToJSONValue(JSONValue& jsonValue, const rapidjson::Value& rapidjsonValue) { switch (rapidjsonValue.GetType()) { case kNullType: // Reset to null type jsonValue.SetType(JSON_NULL); break; case kFalseType: jsonValue = false; break; case kTrueType: jsonValue = true; break; case kNumberType: if (rapidjsonValue.IsInt()) jsonValue = rapidjsonValue.GetInt(); else if (rapidjsonValue.IsUint()) jsonValue = rapidjsonValue.GetUint(); else jsonValue = rapidjsonValue.GetDouble(); break; case kStringType: jsonValue = rapidjsonValue.GetString(); break; case kArrayType: { jsonValue.Resize(rapidjsonValue.Size()); for (unsigned i = 0; i < rapidjsonValue.Size(); ++i) { ToJSONValue(jsonValue[i], rapidjsonValue[i]); } } break; case kObjectType: { jsonValue.SetType(JSON_OBJECT); for (rapidjson::Value::ConstMemberIterator i = rapidjsonValue.MemberBegin(); i != rapidjsonValue.MemberEnd(); ++i) { JSONValue& value = jsonValue[String(i->name.GetString())]; ToJSONValue(value, i->value); } } break; default: break; } }
bool getJsonNumber(const rapidjson::Value &v, T &dst) { if (v.IsDouble()) dst = T(v.GetDouble()); else if (v.IsInt()) dst = T(v.GetInt()); else if (v.IsUint()) dst = T(v.GetUint()); else if (v.IsInt64()) dst = T(v.GetInt64()); else if (v.IsUint64()) dst = T(v.GetUint64()); else return false; return true; }
void Json_Parser::read_print_for_array(rapidjson::Value &va,int i){ if (va.IsBool()) { const bool flag=va.GetBool(); CCLOG("%d:%d",i,flag); } else if (va.IsDouble()) { const double flag=va.GetDouble(); CCLOG("%d:%f",i,flag); } else if (va.IsInt()) { const int flag=va.GetInt(); CCLOG("%d:%d",i,flag); } else if (va.IsString()) { const std::string flag=va.GetString(); CCLOG("%d:%s",i,flag.c_str()); } else if (va.IsNull()) { CCLOG("%d:null",i); } else if(va.IsObject()) { CCLOG("obj----------%d",i); auto it=va.MemberBegin(); for (;it!=va.MemberEnd();it++) { if (va.HasMember(it->name)) { read_print(va,it->name.GetString()); } } } else if(va.IsArray()) { CCLOG("array-------%d",i); for (int i=0; i<va.Size();i++) { read_print_for_array(va[i],i); } } }
void Json_Parser::read_to_map_for_array(cocos2d::ValueVector &temp,rapidjson::Value &va,int i){ CCLOG("dex:%d",i); if (va.IsBool()) { const bool flag=va.GetBool(); temp.push_back(Value(flag)); } else if (va.IsDouble()) { const double flag=va.GetDouble(); temp.push_back(Value(flag)); } else if (va.IsInt()) { const int flag=va.GetInt(); temp.push_back(Value(flag)); } else if (va.IsString()) { const std::string flag=va.GetString(); temp.push_back(Value(flag)); // CCLOG("++:%d",temp.size()); } else if (va.IsNull()) { temp.push_back(Value(nullptr)); } else if(va.IsObject()) { cocos2d::ValueMap temp2; auto it=va.MemberBegin(); for (;it!=va.MemberEnd();it++) { if (va.HasMember(it->name)) { read_to_map(temp2,va,it->name.GetString()); } } temp.push_back(Value(temp2)); // CCLOG("mapinvectro层:%lu",temp2.size()); } else if(va.IsArray()) { cocos2d::ValueVector temp2; for (int i=0; i<va.Size();i++) { read_to_map_for_array(temp2,va[i],i); } temp.push_back(Value(temp2)); // CCLOG("vectorinvectro层:%lu",temp.size()); } }
double get_value(const rapidjson::Value& root, const char* key) { if (key != nullptr) { if (root[key].IsNumber() && root.HasMember(key)) return root[key].GetDouble(); else throw std::system_error(std::error_code(), "Parse error."); } else { if (root.IsNumber()) return root.GetDouble(); else throw std::system_error(std::error_code(), "Parse error."); } }
std::string SettingRegistry::toString(const rapidjson::Value& dflt, std::string setting_name) { if (dflt.IsString()) { return dflt.GetString(); } else if (dflt.IsTrue()) { return "true"; } else if (dflt.IsFalse()) { return "false"; } else if (dflt.IsNumber()) { std::ostringstream ss; ss << dflt.GetDouble(); return ss.str(); } else if (dflt.IsArray()) { std::stringstream ss; ss << "["; bool first = true; for (auto it = dflt.Begin(); it != dflt.End(); ++it) { if (!first) { ss << ","; } ss << toString(*it); first = false; } ss << "]"; return ss.str(); } else { logError("Unrecognized data type in JSON: %s has type %s\n", setting_name.c_str(), toString(dflt.GetType()).c_str()); return ""; } }
double traverse_rapidjson(const rapidjson::Value &v) { double x = 0; if (v.IsObject()) { for (auto i = v.MemberBegin(); i != v.MemberEnd(); ++i) { x += traverse_rapidjson(i->value); } } else if (v.IsArray()) { for (auto i = v.Begin(); i != v.End(); ++i) { x += traverse_rapidjson(*i); } } else if (v.IsNumber()) { x = v.GetDouble(); } return x; }
bool MetaDataValue::set_value(const rapidjson::Value& v) { if( v.IsDouble()) { _vPtr = new double(v.GetDouble()); } else if(v.IsBool()) { _vPtr = new bool(v.GetBool()); } else if(v.IsInt()) { _vPtr = new int(v.GetInt()); } else if(v.IsString()) { _vPtr = new std::string(v.GetString()); } else return false; return true; }
void ConvertToMsgPack(const rapidjson::Value& json, msgpack::object& object, msgpack::zone& zone) { switch (json.GetType()) { case rapidjson::kFalseType: object = false; break; case rapidjson::kTrueType: object = true; break; case rapidjson::kNumberType: { if (json.IsInt()) { object = json.GetInt(); } else if (json.IsUint()) { object = json.GetUint(); } else if (json.IsInt64()) { object = json.GetInt64(); } else if (json.IsUint64()) { object = json.GetUint64(); } else if (json.IsDouble()) { object = json.GetDouble(); } break; } case rapidjson::kStringType: // we allocate with 'zone', otherwise the std::string's raw pointer gets used, which won't work as it gets destructed later on object = msgpack::object(std::string(json.GetString(), json.GetStringLength()), zone); break; case rapidjson::kObjectType: { std::map<std::string, msgpack::object> list; for (auto it = json.MemberBegin(); it != json.MemberEnd(); it++) { msgpack::object newObject; ConvertToMsgPack(it->value, newObject, zone); list.insert({ it->name.GetString(), newObject }); } object = msgpack::object(list, zone); break; } case rapidjson::kArrayType: { std::vector<msgpack::object> list; for (auto it = json.Begin(); it != json.End(); it++) { msgpack::object newObject; ConvertToMsgPack(*it, newObject, zone); list.push_back(newObject); } object = msgpack::object(list, zone); break; } default: object = msgpack::type::nil(); break; } }
template<> inline double conf_getter<double>(const rapidjson::Value & value) { return value.GetDouble(); }
bool clone_value(rapidjson::Value & output, const rapidjson::Value & input, rapidjson::Value::AllocatorType & allocator) { if(&output == &input) { return false; } if(input.IsNull()) { output.SetNull(); } else if(input.IsInt64()) { output.SetInt(input.GetInt64()); } else if(input.IsInt()) { output.SetInt(input.GetInt()); } else if(input.IsDouble()) { output.SetDouble(input.GetDouble()); } else if(input.IsBool()) { output.SetBool(input.GetBool()); } else if(input.IsString()) { output.SetString(input.GetString(), input.GetStringLength(), allocator); } else if(input.IsArray()) { rapidjson::Value temp; output.SetArray(); output.Reserve(input.Size(), allocator); for(rapidjson::SizeType i = 0; i < input.Size(); ++i) { clone_value(temp, input[i], allocator); output.PushBack(temp, allocator); } } else if(input.IsObject()) { output.SetObject(); rapidjson::Value key, val; for(rapidjson::Value::ConstMemberIterator it = input.MemberBegin(); it != input.MemberEnd(); ++it) { clone_value(key, it->name, allocator); clone_value(val, it->value, allocator); output.AddMember(key, val, allocator); } } else { assert(false && "shuldn't execute to here."); return false; } return true; }