5 Num(SIn), Str(SIn), ValV(SIn), KeyValH(SIn) { }
28 return !(*
this == JsonVal);
33 int KeyId = Val->KeyValH.FFirstKeyId();
34 while (Val->KeyValH.FNextKeyId(KeyId)) {
35 AddToObj(Val->KeyValH.GetKey(KeyId), Val->KeyValH[KeyId]);
41 for (
int ValN = 0; ValN < ValV.
Len(); ValN++) {
42 Val->AddToArr(ValV[ValN]);
49 for (
int IntN = 0; IntN < IntV.
Len(); IntN++) {
57 for (
int FltN = 0; FltN < FltV.
Len(); FltN++) {
65 for (
int StrN = 0; StrN < StrV.
Len(); StrN++) {
124 Val->PutNull(); Lx.
GetSym();
126 Val->PutBool(
true); Lx.
GetSym();
128 Val->PutBool(
false); Lx.
GetSym();
134 Val->PutArr(); Lx.
GetSym(ValExpect);
138 Val->AddToArr(SubVal);
153 Val->AddToObj(SubKey, SubVal);
177 MsgStr=Except->GetMsgStr();
193 for (
int ChN = 0; ChN < UStr.
Len(); ChN++) {
194 const int UCh = UStr[ChN];
197 const char Ch = (char)UCh;
199 case '"' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'"');
break;
200 case '\\' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'\\');
break;
201 case '/' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'/');
break;
202 case '\b' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'b');
break;
203 case '\f' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'f');
break;
204 case '\n' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'n');
break;
205 case '\r' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'r');
break;
206 case '\t' : ChA.
AddCh(
'\\'); ChA.
AddCh(
't');
break;
218 for (
int ChN = 0; ChN < Str.
Len(); ChN++) {
219 const char Ch = Str[ChN];
220 if ((Ch & 0x80) == 0) {
223 case '"' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'"');
break;
224 case '\\' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'\\');
break;
225 case '/' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'/');
break;
226 case '\b' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'b');
break;
227 case '\f' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'f');
break;
228 case '\n' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'n');
break;
229 case '\r' : ChA.
AddCh(
'\\'); ChA.
AddCh(
'r');
break;
230 case '\t' : ChA.
AddCh(
'\\'); ChA.
AddCh(
't');
break;
231 default : ChA.
AddCh(Ch);
249 switch (Val->GetJsonValType()){
253 if (Val->GetBool()){ChA+=
"true";}
else {ChA+=
"false";}
break;
255 ChA+=
TStr::Fmt(
"%f", Val->GetNum());
break;
260 for (
int ArrValN=0; ArrValN<Val->GetArrVals(); ArrValN++){
261 if (ArrValN>0){ChA+=
", ";}
268 for (
int ObjKeyN=0; ObjKeyN<Val->GetObjKeys(); ObjKeyN++){
269 if (ObjKeyN>0){ChA+=
", ";}
270 TStr ObjKey;
PJsonVal ObjVal; Val->GetObjKeyVal(ObjKeyN, ObjKey, ObjVal);
static void GetChAFromVal(const PJsonVal &Val, TChA &ChA)
void Save(TSOut &SOut) const
void AddCh(const char &Ch, const int &MxLen=-1)
TSizeTy Len() const
Returns the number of elements in the vector.
void Save(TSOut &SOut) const
static TUnicode * GetDef()
static PJsonVal GetValFromLx(TILx &Lx)
static PJsonVal GetValFromStr(const TStr &JsonStr)
THash< TStr, PJsonVal > KeyValH
void Save(TSOut &SOut) const
bool operator!=(const TJsonVal &JsonVal) const
void Save(TSOut &SOut) const
static void Throw(const TStr &MsgStr)
void Save(TSOut &SOut, const bool &IsSmall=false) const
static PSIn New(const TStr &Str)
static PJsonVal NewStr(const TStr &Str)
void AddToObj(const TStr &KeyNm, const PJsonVal &Val)
bool operator==(const TJsonVal &JsonVal) const
static void AddEscapeChAFromStr(const TStr &Str, TChA &ChA)
int DecodeUtf8(const TIntV &src, TIntV &dest) const
double GetObjNum(const TStr &Key) const
static TStr GetStrFromVal(const PJsonVal &Val)
PJsonVal GetObjKey(const TStr &Key) const
static TStr Fmt(const char *FmtStr,...)
bool GetObjBool(const TStr &Key) const
TStr GetObjStr(const TStr &Key) const
TLxSym GetSym(const TFSet &Expect)
static PJsonVal GetValFromSIn(const PSIn &SIn)
static PJsonVal NewNum(const double &Num)
void Save(TSOut &SOut) const
static void AddQChAFromStr(const TStr &Str, TChA &ChA)
bool IsObjKey(const TStr &Key) const