我使用" rapidjson"解析JSON字符串。 我正在学习以下关于json对象的SAX类型解析的例子。
在这个SAX类型解析中,rapidjson为解析时收到的每个数据类型调用事件处理程序。(作为(https://github.com/miloyip/rapidjson/blob/2e0b3de8d68758b2866fff5f047c893b8a1c4290/doc/sax.md处的文档)
我如何区分给定元素是与该键对应的键和值?
答案 0 :(得分:0)
您只能按事件顺序的顺序区分键和值。
当Reader
(SAX Parser)遇到JSON对象时,它会调用处理程序的StartObject()
。然后会有一系列键值对。密钥必须是String()
调用,但值可以是任何JSON值类型。最后它调用了EndObject()
。
因此,您需要跟踪解析的状态。对于简单的结构,它只需要一个枚举来表示当前状态。对于递归结构,您可能需要自定义堆栈。
在this section中,它显示了将简单对象解析为自定义数据结构的示例。它需要处理3个州。或者,您可以使用计数器来调用String()
,并使用odd / even来确定它是键还是值。
有时使用SAX API可能会更困难。另一方面,它提供了更好的性能和更少的内存开销。
更新:2014/9/5
在Key()
之外添加String()
个事件的提取请求已merged。新界面应简化编写自定义处理程序。