//<Part.八> JSON字符串转对象的处理类
class jsonStringParser {
public:
//分析json字符串,得到键值信息集合
bool parseString(const string& json);
//处理数据以归档到对象
bool archiveData(jsonObjectBaseClass& Obj); ;
//获取当前节点,如果返回空则表示无可处理节点。
jsonStringKeyValue* getCurrentKeyValue();
private:
//获取当前处理的目标
jsonObjectTarget* getCurrentTarget();
//弹出键值
void popKeyValue();
//弹出目标
void popTarget();
//处理当前键值节点并将数据归档到JSON对象上面
bool archiveMember();
//处理key的前缀
bool archivePrefix(bool& bOver);
//处理key的后缀
bool archiveSuffix();
//键值栈:从json字符串获取到的键值集合,正在处理中的键值总是在栈顶
stack<jsonStringKeyValue*> srcKvStack;
//目标物栈:栈来做后进先出解析,正在处理中的目标总是在栈顶的
stack<jsonObjectTarget> destTargetStack;
};
键值来源栈与物体目标栈
JSON字符串解析后,键值节点倒序进入键值来源栈,当前正在处理的键值节点总是在键值来源栈顶部;当前正在归档数据的物体总是在物体目标栈的顶部。两者互动的不断弹出,最终完成JSON字符串转化为JSON对象的处理。
物体目标栈上的物体
根据JSON键值是否在JSON类有对应的节点,可分为真物和假物两种。
判断节点是单还是数组,又将物体分为JSON对象、数组(元素可为原子或JSON)两类。
所以在物体目标栈上面,物体种类一共会有2*2个组合。