void TJsonVal::GetArrIntV(TIntV& IntV) const { EAssert(IsArr()); for (int IntN = 0; IntN < GetArrVals(); IntN++) { PJsonVal ArrVal = GetArrVal(IntN); EAssert(ArrVal->IsNum()); IntV.Add(ArrVal->GetInt()); } }
void TJsonVal::GetArrUInt64V(TUInt64V& UInt64V) const { EAssert(IsArr()); for (int IntN = 0; IntN < GetArrVals(); IntN++) { PJsonVal ArrVal = GetArrVal(IntN); EAssert(ArrVal->IsNum()); UInt64V.Add(ArrVal->GetUInt64()); } }
void TJsonVal::GetArrNumV(TFltV& FltV) const { EAssert(IsArr()); for (int FltN = 0; FltN < GetArrVals(); FltN++) { PJsonVal ArrVal = GetArrVal(FltN); EAssert(ArrVal->IsNum()); FltV.Add(ArrVal->GetNum()); } }
v8::Local<v8::Value> TNodeJsUtil::ParseJson(v8::Isolate* Isolate, const PJsonVal& JsonVal) { v8::EscapableHandleScope HandleScope(Isolate); if (!JsonVal->IsDef()) { return v8::Undefined(Isolate); } else if (JsonVal->IsBool()) { return v8::Boolean::New(Isolate, JsonVal->GetBool()); } else if (JsonVal->IsNull()) { return v8::Null(Isolate); } else if (JsonVal->IsNum()) { return HandleScope.Escape(v8::Number::New(Isolate, JsonVal->GetNum())); } else if (JsonVal->IsStr()) { return HandleScope.Escape(v8::String::NewFromUtf8(Isolate, JsonVal->GetStr().CStr())); } else if (JsonVal->IsArr()) { const uint Len = JsonVal->GetArrVals(); v8::Local<v8::Array> ResArr = v8::Array::New(Isolate, Len); for (uint i = 0; i < Len; i++) { ResArr->Set(i, ParseJson(Isolate, JsonVal->GetArrVal(i))); } return HandleScope.Escape(ResArr); } else if (JsonVal->IsObj()) { v8::Local<v8::Object> ResObj = v8::Object::New(Isolate); const int NKeys = JsonVal->GetObjKeys(); for (int i = 0; i < NKeys; i++) { TStr Key; PJsonVal Val; JsonVal->GetObjKeyVal(i, Key, Val); ResObj->Set(v8::String::NewFromUtf8(Isolate, Key.CStr()), ParseJson(Isolate, Val)); } return HandleScope.Escape(ResObj); } else { throw TExcept::New("Invalid JSON!", "TNodeJsUtil::ParseJson"); } }