//<Part.七> JSON字符串解析目标物
/*JSON字符串解析目标物,可能是JSON对象,也可能是原子数据、JSON对象的数组。
还有一种可能:当找到一个非成员节点时本来是要忽略的,但不能忽略,这时目标物栈压入一个假目标物体*/
class jsonObjectTarget {
public:
//JSON对象
jsonObjectBaseClass* ptrOwnObj;
MemberDefineCategory cateOwnObj;//用于标识ptrOwnObj的类别
//记录pObj当前正在分析的成员
jsonObjectMemberInfo parsingMemInfo;
jsonObjectTarget() {
ptrOwnObj = NULL;
cateOwnObj = MemberDefineCategory_Undefine;
}
//当前栈上对象是否数组类别
bool isOwnObjArray() {
return MemberDefineCategory_Array == cateOwnObj;
}
//当前栈上对象是否单个类别
bool isOwnObjSingle() {
return MemberDefineCategory_Single == cateOwnObj;
}
//设置栈上对象为数组类别
void setOwnObjArray() {
cateOwnObj = MemberDefineCategory_Array;
}
//设置栈上对象为单个类别
void setOwnObjSingle() {
cateOwnObj = MemberDefineCategory_Single;
}
//设置JSON对象
void setOwnObj(jsonObjectBaseClass* p) {
ptrOwnObj = p;
}
//设置假物体:用于不存在的JSON节点解析
void setFake() {
ptrOwnObj = NULL;
}
//是否一个假物体:用于不存在的JSON节点解析
bool isFake() {
return ptrOwnObj == NULL;
}
//获取成员信息
void getMemberInfo(const string& key) {
ptrOwnObj->getMemberInfo(key, parsingMemInfo);
}
};
JSON字符串解析过程,见第二章。jsonObjectTarget 存在于物体目标栈。