00001
00002
00003
00004 #ifndef _JSON_H
00005 #define _JSON_H
00006
00007 #include "str.h"
00008 #include "var.h"
00009
00010 namespace jvar
00011 {
00012
00016 class JsonParser : public Parser
00017 {
00018 public:
00026 JsonParser(Variant& outvar, const char* jsontxt, uint flags = 0);
00027
00028 enum
00029 {
00033 FLAG_FLEXQUOTES = 0x1,
00037 FLAG_OBJECTONLY = 0x2,
00041 FLAG_ARRAYONLY = 0x4
00042 };
00043
00044 protected:
00045 void parseObject(Variant& var);
00046 void parseMembers(Variant& var);
00047 void parseArray(Variant& var);
00048 void parseElements(Variant& var);
00049 void parseValue(Variant& var);
00050 void parseNum(Variant& var);
00051 void parseString(Variant& var);
00052
00053 bool isString(const std::string& s, bool requirequotes);
00054 inline bool isArray(const std::string& s)
00055 {
00056 return s.compare("[") == 0;
00057 }
00058 inline bool isObject(const std::string& s)
00059 {
00060 return s.compare("{") == 0;
00061 }
00062 inline bool isNum(const std::string& s)
00063 {
00064 int l = s.length();
00065 if (l >= 1)
00066 {
00067 if (isdigit(s[0]) || s[0] == '-')
00068 {
00069 return true;
00070 }
00071 }
00072 return false;
00073 }
00074
00075 protected:
00076 uint mFlags;
00077 };
00078
00079 }
00080
00081 #endif // _JSON_H