greenJson_C++_Lib 之八:定义JSON字符串的解析处理器

//<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个组合。

发布了11 篇原创文章 · 获赞 1 · 访问量 299

猜你喜欢

转载自blog.csdn.net/u011697262/article/details/103940845