|
SNAP Library 2.1, User Reference
2013-09-25 10:47:25
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 |
| TStr | SaveStr () |
| bool | operator== (const TJsonVal &JsonVal) const |
| bool | operator!= (const TJsonVal &JsonVal) 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) |
| void | AddToObj (const PJsonVal &Val) |
| TJsonValType | GetJsonValType () const |
| bool | IsDef () 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 TIntV &IntV) |
| static PJsonVal | NewArr (const TFltV &FltV) |
| static PJsonVal | NewArr (const TStrV &StrV) |
| static PJsonVal | NewArr (const TFltPr &FltPr) |
| 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 | GetValFromSIn (const PSIn &SIn) |
| 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 | ) |
Definition at line 3 of file json.cpp.
: JsonValType((TJsonValType)(TInt(SIn).Val)), Bool(SIn), Num(SIn), Str(SIn), ValV(SIn), KeyValH(SIn) { }
| void TJsonVal::AddEscapeChAFromStr | ( | const TStr & | Str, |
| TChA & | ChA | ||
| ) | [static] |
Definition at line 188 of file json.cpp.
{
if (TUnicodeDef::IsDef()) {
// parse the UTF8 string
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 113 of file json.h.
{
TChA ChA; AddEscapeChAFromStr(Str, ChA); return ChA; }
| void TJsonVal::AddQChAFromStr | ( | const TStr & | Str, |
| TChA & | ChA | ||
| ) | [static] |
Definition at line 242 of file json.cpp.
{
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] |
| void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
| const double & | Val | ||
| ) | [inline] |
| void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
| const TStr & | Val | ||
| ) | [inline] |
| void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
| const char * | Val | ||
| ) | [inline] |
| void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
| const bool & | Val | ||
| ) | [inline] |
| void TJsonVal::AddToObj | ( | const TStr & | KeyNm, |
| const TJsonValV & | ValV | ||
| ) | [inline] |
| void TJsonVal::AddToObj | ( | const PJsonVal & | Val | ) |
| 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 248 of file json.cpp.
{
switch (Val->GetJsonValType()){
case jvtNull:
ChA+="null"; break;
case jvtBool:
if (Val->GetBool()){ChA+="true";} else {ChA+="false";} break;
case jvtNum:
ChA+=TStr::Fmt("%f", 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 73 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] |
| TStr TJsonVal::GetObjStr | ( | const char * | Key | ) | const [inline] |
| 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 281 of file json.cpp.
{
TChA ChA;
GetChAFromVal(Val, ChA);
return ChA;
}
| PJsonVal TJsonVal::GetValFromLx | ( | TILx & | Lx | ) | [static] |
Definition at line 120 of file json.cpp.
{
static TFSet ValExpect=TFSet()|syIdStr|syFlt|syQStr|syLBracket|syLBrace|syRBracket;
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::GetValFromSIn | ( | const PSIn & | SIn | ) | [static] |
Definition at line 166 of file json.cpp.
{
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;
}
| PJsonVal TJsonVal::GetValFromStr | ( | const TStr & | JsonStr | ) | [static] |
Definition at line 183 of file json.cpp.
{
PSIn SIn=TStrIn::New(JsonStr);
return GetValFromSIn(SIn);
}
| bool TJsonVal::IsArr | ( | ) | const [inline] |
Definition at line 79 of file json.h.
{return JsonValType==jvtArr;}
| bool TJsonVal::IsBool | ( | ) | const [inline] |
Definition at line 76 of file json.h.
{return JsonValType==jvtBool;}
| bool TJsonVal::IsDef | ( | ) | const [inline] |
Definition at line 74 of file json.h.
{return JsonValType!=jvtUndef;}
| bool TJsonVal::IsNull | ( | ) | const [inline] |
Definition at line 75 of file json.h.
{return JsonValType==jvtNull;}
| bool TJsonVal::IsNum | ( | ) | const [inline] |
Definition at line 77 of file json.h.
{return JsonValType==jvtNum;}
| bool TJsonVal::IsObj | ( | ) | const [inline] |
Definition at line 80 of file json.h.
{return JsonValType==jvtObj;}
| bool TJsonVal::IsObjKey | ( | const TStr & | Key | ) | const [inline] |
| bool TJsonVal::IsObjKey | ( | const char * | Key | ) | const [inline] |
| bool TJsonVal::IsStr | ( | ) | const [inline] |
Definition at line 78 of file json.h.
{return JsonValType==jvtStr;}
| static PJsonVal TJsonVal::Load | ( | TSIn & | SIn | ) | [inline, static] |
| static PJsonVal TJsonVal::New | ( | ) | [inline, static] |
| static PJsonVal TJsonVal::NewArr | ( | ) | [inline, static] |
Definition at line 54 of file json.h.
{ PJsonVal Val = TJsonVal::New(); Val->PutArr(); return Val; }
| PJsonVal TJsonVal::NewArr | ( | const TJsonValV & | ValV | ) | [static] |
Definition at line 39 of file json.cpp.
{
PJsonVal Val = TJsonVal::NewArr();
for (int ValN = 0; ValN < ValV.Len(); ValN++) {
Val->AddToArr(ValV[ValN]);
}
return Val;
}
| PJsonVal TJsonVal::NewArr | ( | const TIntV & | IntV | ) | [static] |
Definition at line 47 of file json.cpp.
{
PJsonVal Val = TJsonVal::NewArr();
for (int IntN = 0; IntN < IntV.Len(); IntN++) {
Val->AddToArr(TJsonVal::NewNum((double)IntV[IntN]));
}
return Val;
}
| PJsonVal TJsonVal::NewArr | ( | const TFltV & | FltV | ) | [static] |
Definition at line 55 of file json.cpp.
{
PJsonVal Val = TJsonVal::NewArr();
for (int FltN = 0; FltN < FltV.Len(); FltN++) {
Val->AddToArr(TJsonVal::NewNum(FltV[FltN]));
}
return Val;
}
| PJsonVal TJsonVal::NewArr | ( | const TStrV & | StrV | ) | [static] |
Definition at line 63 of file json.cpp.
{
PJsonVal Val = TJsonVal::NewArr();
for (int StrN = 0; StrN < StrV.Len(); StrN++) {
Val->AddToArr(TJsonVal::NewStr(StrV[StrN]));
}
return Val;
}
| PJsonVal TJsonVal::NewArr | ( | const TFltPr & | FltPr | ) | [static] |
Definition at line 71 of file json.cpp.
{
PJsonVal Val = TJsonVal::NewArr();
Val->AddToArr(TJsonVal::NewNum(FltPr.Val1));
Val->AddToArr(TJsonVal::NewNum(FltPr.Val2));
return Val;
}
| static PJsonVal TJsonVal::NewBool | ( | const bool & | Bool | ) | [inline, static] |
Definition at line 51 of file json.h.
{ PJsonVal Val = TJsonVal::New(); Val->PutBool(Bool); return Val; }
| static PJsonVal TJsonVal::NewNull | ( | ) | [inline, static] |
Definition at line 50 of file json.h.
{ PJsonVal Val = TJsonVal::New(); Val->PutNull(); return Val; }
| static PJsonVal TJsonVal::NewNum | ( | const double & | Num | ) | [inline, static] |
Definition at line 52 of file json.h.
{ PJsonVal Val = TJsonVal::New(); Val->PutNum(Num); return Val; }
| static PJsonVal TJsonVal::NewObj | ( | ) | [inline, static] |
Definition at line 60 of file json.h.
{ PJsonVal Val = TJsonVal::New(); Val->PutObj(); return Val; }
| static PJsonVal TJsonVal::NewObj | ( | const TStr & | KeyNm, |
| const PJsonVal & | ObjVal | ||
| ) | [inline, static] |
Definition at line 61 of file json.h.
{
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 63 of file json.h.
{
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 65 of file json.h.
{
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 67 of file json.h.
{
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 69 of file json.h.
{
PJsonVal Val = TJsonVal::New(); Val->PutObj(); Val->AddToObj(KeyNm, ObjVal); return Val; }
| static PJsonVal TJsonVal::NewStr | ( | const TStr & | Str | ) | [inline, static] |
Definition at line 53 of file json.h.
{ PJsonVal Val = TJsonVal::New(); Val->PutStr(Str); return Val; }
| bool TJsonVal::operator!= | ( | const TJsonVal & | JsonVal | ) | const |
| bool TJsonVal::operator== | ( | const TJsonVal & | JsonVal | ) | const |
| void TJsonVal::PutArr | ( | ) | [inline] |
| void TJsonVal::PutBool | ( | const bool & | _Bool | ) | [inline] |
Definition at line 32 of file json.h.
{JsonValType=jvtBool; Bool=_Bool;}
| void TJsonVal::PutNull | ( | ) | [inline] |
| void TJsonVal::PutNum | ( | const double & | _Num | ) | [inline] |
Definition at line 33 of file json.h.
{JsonValType=jvtNum; Num=_Num;}
| void TJsonVal::PutObj | ( | ) | [inline] |
| void TJsonVal::PutStr | ( | const TStr & | _Str | ) | [inline] |
Definition at line 34 of file json.h.
{JsonValType=jvtStr; Str=_Str;}
| void TJsonVal::Save | ( | TSOut & | SOut | ) | const |
Definition at line 14 of file json.cpp.
{
return GetStrFromVal(this);
}
| TJsonVal::UndefCopyAssign | ( | TJsonVal | ) | [private] |
TBool TJsonVal::Bool [private] |
TCRef TJsonVal::CRef [private] |
TJsonValType TJsonVal::JsonValType [private] |
TFlt TJsonVal::Num [private] |
TStr TJsonVal::Str [private] |
TJsonValV TJsonVal::ValV [private] |