SNAP Library , Developer Reference
2013-01-07 14:03:36
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
|
#include <json.h>
Public Member Functions | |
TJsonVal () | |
TJsonVal (TSIn &SIn) | |
void | Save (TSOut &SOut) const |
void | PutNull () |
void | PutBool (const bool &_Bool) |
void | PutNum (const double &_Num) |
void | PutStr (const TStr &_Str) |
void | PutArr () |
void | AddToArr (const PJsonVal &Val) |
void | PutObj () |
void | AddToObj (const TStr &KeyNm, const PJsonVal &Val) |
void | AddToObj (const TStr &KeyNm, const int &Val) |
void | AddToObj (const TStr &KeyNm, const double &Val) |
void | AddToObj (const TStr &KeyNm, const TStr &Val) |
void | AddToObj (const TStr &KeyNm, const char *Val) |
void | AddToObj (const TStr &KeyNm, const bool &Val) |
void | AddToObj (const TStr &KeyNm, const TJsonValV &ValV) |
TJsonValType | GetJsonValType () const |
bool | IsNull () const |
bool | IsBool () const |
bool | IsNum () const |
bool | IsStr () const |
bool | IsArr () const |
bool | IsObj () const |
bool | GetBool () const |
double | GetNum () const |
TStr | GetStr () const |
int | GetArrVals () const |
PJsonVal | GetArrVal (const int &ValN) const |
int | GetObjKeys () const |
void | GetObjKeyVal (const int &KeyValN, TStr &Key, PJsonVal &Val) const |
bool | IsObjKey (const TStr &Key) const |
bool | IsObjKey (const char *Key) const |
PJsonVal | GetObjKey (const TStr &Key) const |
PJsonVal | GetObjKey (const char *Key) const |
bool | GetObjBool (const TStr &Key) const |
bool | GetObjBool (const char *Key) const |
double | GetObjNum (const TStr &Key) const |
double | GetObjNum (const char *Key) const |
TStr | GetObjStr (const TStr &Key) const |
TStr | GetObjStr (const char *Key) const |
bool | GetObjBool (const TStr &Key, const bool &DefBool) const |
bool | GetObjBool (const char *Key, const bool &DefBool) const |
double | GetObjNum (const TStr &Key, const double &DefNum) const |
double | GetObjNum (const char *Key, const double &DefNum) const |
TStr | GetObjStr (const TStr &Key, const TStr &DefStr) const |
TStr | GetObjStr (const char *Key, const TStr &DefStr) const |
Static Public Member Functions | |
static PJsonVal | New () |
static PJsonVal | Load (TSIn &SIn) |
static PJsonVal | NewNull () |
static PJsonVal | NewBool (const bool &Bool) |
static PJsonVal | NewNum (const double &Num) |
static PJsonVal | NewStr (const TStr &Str) |
static PJsonVal | NewArr () |
static PJsonVal | NewArr (const TJsonValV &ValV) |
static PJsonVal | NewArr (const TStrV &StrV) |
static PJsonVal | NewObj () |
static PJsonVal | NewObj (const TStr &KeyNm, const PJsonVal &ObjVal) |
static PJsonVal | NewObj (const TStr &KeyNm, const int &ObjVal) |
static PJsonVal | NewObj (const TStr &KeyNm, const double &ObjVal) |
static PJsonVal | NewObj (const TStr &KeyNm, const TStr &ObjVal) |
static PJsonVal | NewObj (const TStr &KeyNm, const bool &ObjVal) |
static PJsonVal | GetValFromLx (TILx &Lx) |
static PJsonVal | GetValFromStr (const TStr &JsonStr) |
static void | AddEscapeChAFromStr (const TStr &Str, TChA &ChA) |
static TStr | AddEscapeStrFromStr (const TStr &Str) |
static void | AddQChAFromStr (const TStr &Str, TChA &ChA) |
static void | GetChAFromVal (const PJsonVal &Val, TChA &ChA) |
static TStr | GetStrFromVal (const PJsonVal &Val) |
Private Member Functions | |
UndefCopyAssign (TJsonVal) | |
Private Attributes | |
TCRef | CRef |
TJsonValType | JsonValType |
TBool | Bool |
TFlt | Num |
TStr | Str |
TJsonValV | ValV |
THash< TStr, PJsonVal > | KeyValH |
Friends | |
class | TPt< TJsonVal > |
TJsonVal::TJsonVal | ( | ) | [inline] |
Definition at line 19 of file json.h.
: JsonValType(jvtUndef){}
TJsonVal::TJsonVal | ( | TSIn & | SIn | ) | [inline] |
void TJsonVal::AddEscapeChAFromStr | ( | const TStr & | Str, |
TChA & | ChA | ||
) | [static] |
Definition at line 122 of file json.cpp.
References TChA::AddCh(), TUnicode::DecodeUtf8(), TStr::Fmt(), TUnicodeDef::GetDef(), TUnicodeDef::IsDef(), TVec< TVal >::Len(), and TStr::Len().
Referenced by AddQChAFromStr().
{ if (TUnicodeDef::IsDef()) { // parse the UTF8 string (old: TUStr InUStr(InStr);) TIntV UStr; TUnicodeDef::GetDef()->DecodeUtf8(Str, UStr); // escape the string for (int ChN = 0; ChN < UStr.Len(); ChN++) { const int UCh = UStr[ChN]; if (UCh < 0x80) { // 7-bit ascii const char Ch = (char)UCh; switch (Ch) { case '"' : ChA.AddCh('\\'); ChA.AddCh('"'); break; case '\\' : ChA.AddCh('\\'); ChA.AddCh('\\'); break; case '/' : ChA.AddCh('\\'); ChA.AddCh('/'); break; case '\b' : ChA.AddCh('\\'); ChA.AddCh('b'); break; case '\f' : ChA.AddCh('\\'); ChA.AddCh('f'); break; case '\n' : ChA.AddCh('\\'); ChA.AddCh('n'); break; case '\r' : ChA.AddCh('\\'); ChA.AddCh('r'); break; case '\t' : ChA.AddCh('\\'); ChA.AddCh('t'); break; default : ChA.AddCh(Ch); } } else { // escape ChA += "\\u"; ChA += TStr::Fmt("%04x", UCh); } } } else { // escape the string for (int ChN = 0; ChN < Str.Len(); ChN++) { const char Ch = Str[ChN]; if ((Ch & 0x80) == 0) { // 7-bit ascii switch (Ch) { case '"' : ChA.AddCh('\\'); ChA.AddCh('"'); break; case '\\' : ChA.AddCh('\\'); ChA.AddCh('\\'); break; case '/' : ChA.AddCh('\\'); ChA.AddCh('/'); break; case '\b' : ChA.AddCh('\\'); ChA.AddCh('b'); break; case '\f' : ChA.AddCh('\\'); ChA.AddCh('f'); break; case '\n' : ChA.AddCh('\\'); ChA.AddCh('n'); break; case '\r' : ChA.AddCh('\\'); ChA.AddCh('r'); break; case '\t' : ChA.AddCh('\\'); ChA.AddCh('t'); break; default : ChA.AddCh(Ch); } } else { // escape ChA += "\\u"; ChA += TStr::Fmt("%02x", (int)Ch); } } } }
static TStr TJsonVal::AddEscapeStrFromStr | ( | const TStr & | Str | ) | [inline, static] |
Definition at line 103 of file json.h.
{ TChA ChA; AddEscapeChAFromStr(Str, ChA); return ChA; }
void TJsonVal::AddQChAFromStr | ( | const TStr & | Str, |
TChA & | ChA | ||
) | [static] |
Definition at line 176 of file json.cpp.
References AddEscapeChAFromStr().
Referenced by GetChAFromVal().
{ ChA+="\""; AddEscapeChAFromStr(Str, ChA); ChA+="\""; }
void TJsonVal::AddToArr | ( | const PJsonVal & | Val | ) | [inline] |
void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
const PJsonVal & | Val | ||
) | [inline] |
void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
const int & | Val | ||
) | [inline] |
Definition at line 37 of file json.h.
References AddToObj().
Referenced by AddToObj().
void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
const double & | Val | ||
) | [inline] |
Definition at line 38 of file json.h.
References AddToObj().
Referenced by AddToObj().
void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
const TStr & | Val | ||
) | [inline] |
Definition at line 39 of file json.h.
References AddToObj().
Referenced by AddToObj().
void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
const char * | Val | ||
) | [inline] |
Definition at line 40 of file json.h.
References AddToObj().
Referenced by AddToObj().
void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
const bool & | Val | ||
) | [inline] |
Definition at line 41 of file json.h.
References AddToObj().
Referenced by AddToObj().
void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
const TJsonValV & | ValV | ||
) | [inline] |
Definition at line 42 of file json.h.
References AddToObj().
Referenced by AddToObj().
PJsonVal TJsonVal::GetArrVal | ( | const int & | ValN | ) | const [inline] |
int TJsonVal::GetArrVals | ( | ) | const [inline] |
bool TJsonVal::GetBool | ( | ) | const [inline] |
void TJsonVal::GetChAFromVal | ( | const PJsonVal & | Val, |
TChA & | ChA | ||
) | [static] |
Definition at line 182 of file json.cpp.
References AddQChAFromStr(), TStr::Fmt(), jvtArr, jvtBool, jvtNull, jvtNum, jvtObj, jvtStr, and TExcept::Throw().
Referenced by GetStrFromVal().
{ switch (Val->GetJsonValType()){ case jvtNull: ChA+="null"; break; case jvtBool: if (Val->GetBool()){ChA+="true";} else {ChA+="false";} break; case jvtNum: ChA+=TStr::Fmt("%g", Val->GetNum()); break; case jvtStr: AddQChAFromStr(Val->GetStr(), ChA); break; case jvtArr: ChA+="["; for (int ArrValN=0; ArrValN<Val->GetArrVals(); ArrValN++){ if (ArrValN>0){ChA+=", ";} GetChAFromVal(Val->GetArrVal(ArrValN), ChA); } ChA+="]"; break; case jvtObj: ChA+="{"; for (int ObjKeyN=0; ObjKeyN<Val->GetObjKeys(); ObjKeyN++){ if (ObjKeyN>0){ChA+=", ";} TStr ObjKey; PJsonVal ObjVal; Val->GetObjKeyVal(ObjKeyN, ObjKey, ObjVal); AddQChAFromStr(ObjKey, ChA); ChA+=":"; GetChAFromVal(ObjVal, ChA); } ChA+="}"; break; default: TExcept::Throw("Error parsing json"); } }
TJsonValType TJsonVal::GetJsonValType | ( | ) | const [inline] |
Definition at line 65 of file json.h.
{return JsonValType;}
double TJsonVal::GetNum | ( | ) | const [inline] |
bool TJsonVal::GetObjBool | ( | const TStr & | Key | ) | const [inline] |
bool TJsonVal::GetObjBool | ( | const char * | Key | ) | const [inline] |
bool TJsonVal::GetObjBool | ( | const TStr & | Key, |
const bool & | DefBool | ||
) | const |
bool TJsonVal::GetObjBool | ( | const char * | Key, |
const bool & | DefBool | ||
) | const |
PJsonVal TJsonVal::GetObjKey | ( | const TStr & | Key | ) | const |
PJsonVal TJsonVal::GetObjKey | ( | const char * | Key | ) | const |
int TJsonVal::GetObjKeys | ( | ) | const [inline] |
void TJsonVal::GetObjKeyVal | ( | const int & | KeyValN, |
TStr & | Key, | ||
PJsonVal & | Val | ||
) | const [inline] |
double TJsonVal::GetObjNum | ( | const TStr & | Key | ) | const [inline] |
double TJsonVal::GetObjNum | ( | const char * | Key | ) | const [inline] |
double TJsonVal::GetObjNum | ( | const TStr & | Key, |
const double & | DefNum | ||
) | const |
double TJsonVal::GetObjNum | ( | const char * | Key, |
const double & | DefNum | ||
) | const |
TStr TJsonVal::GetObjStr | ( | const TStr & | Key | ) | const [inline] |
Definition at line 90 of file json.h.
References TStr::GetStr().
{ return GetObjKey(Key)->GetStr(); }
TStr TJsonVal::GetObjStr | ( | const char * | Key | ) | const [inline] |
Definition at line 91 of file json.h.
References TStr::GetStr().
{ return GetObjKey(Key)->GetStr(); }
TStr TJsonVal::GetObjStr | ( | const TStr & | Key, |
const TStr & | DefStr | ||
) | const |
TStr TJsonVal::GetObjStr | ( | const char * | Key, |
const TStr & | DefStr | ||
) | const |
TStr TJsonVal::GetStr | ( | ) | const [inline] |
TStr TJsonVal::GetStrFromVal | ( | const PJsonVal & | Val | ) | [static] |
Definition at line 215 of file json.cpp.
References GetChAFromVal().
{ TChA ChA; GetChAFromVal(Val, ChA); return ChA; }
PJsonVal TJsonVal::GetValFromLx | ( | TILx & | Lx | ) | [static] |
Definition at line 61 of file json.cpp.
References TILx::Flt, forever, TILx::GetSym(), New(), TILx::Str, syColon, syComma, syFlt, syIdStr, syLBrace, syLBracket, TILx::Sym, syQStr, syRBrace, syRBracket, and TExcept::Throw().
Referenced by GetValFromStr().
{ static TFSet ValExpect=TFSet()|syIdStr|syFlt|syQStr|syLBracket|syLBrace; PJsonVal Val=TJsonVal::New(); if ((Lx.Sym==syIdStr)&&(Lx.Str=="null")){ Val->PutNull(); Lx.GetSym(); } else if ((Lx.Sym==syIdStr)&&(Lx.Str=="true")){ Val->PutBool(true); Lx.GetSym(); } else if ((Lx.Sym==syIdStr)&&(Lx.Str=="false")){ Val->PutBool(false); Lx.GetSym(); } else if (Lx.Sym==syFlt){ Val->PutNum(Lx.Flt); Lx.GetSym(); } else if (Lx.Sym==syQStr){ Val->PutStr(Lx.Str); Lx.GetSym(); } else if (Lx.Sym==syLBracket){ Val->PutArr(); Lx.GetSym(ValExpect); // added ValExpect to correctyl parse arrays of floats if (Lx.Sym!=syRBracket){ forever{ PJsonVal SubVal=TJsonVal::GetValFromLx(Lx); Val->AddToArr(SubVal); if (Lx.Sym==syComma){Lx.GetSym(ValExpect);} else if (Lx.Sym==syRBracket){break;} else {TExcept::Throw("JSON Array not properly formed.");} } } Lx.GetSym(); } else if (Lx.Sym==syLBrace){ Val->PutObj(); Lx.GetSym(TFSet()|syRBrace|syQStr); if (Lx.Sym!=syRBrace){ forever{ TStr SubKey=Lx.Str; Lx.GetSym(syColon); Lx.GetSym(ValExpect); PJsonVal SubVal=TJsonVal::GetValFromLx(Lx); Val->AddToObj(SubKey, SubVal); if (Lx.Sym==syComma){Lx.GetSym(TFSet()|syQStr);} else if (Lx.Sym==syRBrace){break;} else {TExcept::Throw("JSON Object not properly formed.");} } } Lx.GetSym(); } else { TExcept::Throw("Unexpected JSON symbol."); } return Val; }
PJsonVal TJsonVal::GetValFromStr | ( | const TStr & | JsonStr | ) | [static] |
Definition at line 107 of file json.cpp.
References TILx::GetSym(), GetValFromLx(), iloCmtAlw, iloCsSens, iloExcept, iloSigNum, New(), syLBrace, and syLBracket.
{ PSIn SIn=TStrIn::New(JsonStr); TILx Lx(SIn, TFSet()|iloCmtAlw|iloCsSens|iloExcept|iloSigNum); PJsonVal Val; bool Ok=true; TStr MsgStr="Ok"; try { Lx.GetSym(TFSet()|syLBracket|syLBrace); Val=GetValFromLx(Lx); } catch (PExcept Except){ Ok=false; MsgStr=Except->GetMsgStr(); Val=TJsonVal::New(); } return Val; }
bool TJsonVal::IsArr | ( | ) | const [inline] |
bool TJsonVal::IsBool | ( | ) | const [inline] |
bool TJsonVal::IsNull | ( | ) | const [inline] |
bool TJsonVal::IsNum | ( | ) | const [inline] |
bool TJsonVal::IsObj | ( | ) | const [inline] |
Definition at line 71 of file json.h.
References jvtObj.
Referenced by GetObjBool(), GetObjKey(), GetObjNum(), and GetObjStr().
{return JsonValType==jvtObj;}
bool TJsonVal::IsObjKey | ( | const TStr & | Key | ) | const [inline] |
Definition at line 82 of file json.h.
References EAssert.
Referenced by GetObjBool(), GetObjKey(), GetObjNum(), and GetObjStr().
bool TJsonVal::IsObjKey | ( | const char * | Key | ) | const [inline] |
bool TJsonVal::IsStr | ( | ) | const [inline] |
static PJsonVal TJsonVal::Load | ( | TSIn & | SIn | ) | [inline, static] |
static PJsonVal TJsonVal::New | ( | ) | [inline, static] |
static PJsonVal TJsonVal::NewArr | ( | ) | [inline, static] |
PJsonVal TJsonVal::NewArr | ( | const TJsonValV & | ValV | ) | [static] |
Definition at line 3 of file json.cpp.
References TVec< TVal >::Len(), and NewArr().
{ PJsonVal Val = TJsonVal::NewArr(); for (int ValN = 0; ValN < ValV.Len(); ValN++) { Val->AddToArr(ValV[ValN]); } return Val; }
PJsonVal TJsonVal::NewArr | ( | const TStrV & | StrV | ) | [static] |
Definition at line 11 of file json.cpp.
References TVec< TVal >::Len(), NewArr(), and NewStr().
{ PJsonVal Val = TJsonVal::NewArr(); for (int StrN = 0; StrN < StrV.Len(); StrN++) { Val->AddToArr(TJsonVal::NewStr(StrV[StrN])); } return Val; }
static PJsonVal TJsonVal::NewBool | ( | const bool & | Bool | ) | [inline, static] |
static PJsonVal TJsonVal::NewNull | ( | ) | [inline, static] |
Definition at line 45 of file json.h.
References New().
{ PJsonVal Val = TJsonVal::New(); Val->PutNull(); return Val; }
static PJsonVal TJsonVal::NewNum | ( | const double & | Num | ) | [inline, static] |
static PJsonVal TJsonVal::NewObj | ( | ) | [inline, static] |
Definition at line 52 of file json.h.
References New().
{ PJsonVal Val = TJsonVal::New(); Val->PutObj(); return Val; }
static PJsonVal TJsonVal::NewObj | ( | const TStr & | KeyNm, |
const PJsonVal & | ObjVal | ||
) | [inline, static] |
Definition at line 53 of file json.h.
References New().
{ PJsonVal Val = TJsonVal::New(); Val->PutObj(); Val->AddToObj(KeyNm, ObjVal); return Val; }
static PJsonVal TJsonVal::NewObj | ( | const TStr & | KeyNm, |
const int & | ObjVal | ||
) | [inline, static] |
Definition at line 55 of file json.h.
References New().
{ PJsonVal Val = TJsonVal::New(); Val->PutObj(); Val->AddToObj(KeyNm, ObjVal); return Val; }
static PJsonVal TJsonVal::NewObj | ( | const TStr & | KeyNm, |
const double & | ObjVal | ||
) | [inline, static] |
Definition at line 57 of file json.h.
References New().
{ PJsonVal Val = TJsonVal::New(); Val->PutObj(); Val->AddToObj(KeyNm, ObjVal); return Val; }
static PJsonVal TJsonVal::NewObj | ( | const TStr & | KeyNm, |
const TStr & | ObjVal | ||
) | [inline, static] |
Definition at line 59 of file json.h.
References New().
{ PJsonVal Val = TJsonVal::New(); Val->PutObj(); Val->AddToObj(KeyNm, ObjVal); return Val; }
static PJsonVal TJsonVal::NewObj | ( | const TStr & | KeyNm, |
const bool & | ObjVal | ||
) | [inline, static] |
Definition at line 61 of file json.h.
References New().
{ PJsonVal Val = TJsonVal::New(); Val->PutObj(); Val->AddToObj(KeyNm, ObjVal); return Val; }
static PJsonVal TJsonVal::NewStr | ( | const TStr & | Str | ) | [inline, static] |
void TJsonVal::PutArr | ( | ) | [inline] |
void TJsonVal::PutBool | ( | const bool & | _Bool | ) | [inline] |
void TJsonVal::PutNull | ( | ) | [inline] |
void TJsonVal::PutNum | ( | const double & | _Num | ) | [inline] |
void TJsonVal::PutObj | ( | ) | [inline] |
void TJsonVal::PutStr | ( | const TStr & | _Str | ) | [inline] |
void TJsonVal::Save | ( | TSOut & | SOut | ) | const [inline] |
TJsonVal::UndefCopyAssign | ( | TJsonVal | ) | [private] |
TBool TJsonVal::Bool [private] |
TCRef TJsonVal::CRef [private] |
TJsonValType TJsonVal::JsonValType [private] |
THash<TStr, PJsonVal> TJsonVal::KeyValH [private] |
Definition at line 16 of file json.h.
Referenced by GetObjBool(), GetObjKey(), GetObjNum(), and GetObjStr().
TFlt TJsonVal::Num [private] |
TStr TJsonVal::Str [private] |
TJsonValV TJsonVal::ValV [private] |