gpt4 book ai didi

c++ - 使用rapidjson解析JSON字符串时如何区分键和值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:09 24 4
gpt4 key购买 nike

我正在使用“rapidjson”解析 JSON 字符串。我正在研究以下 json 对象的 SAX 类型解析示例。

https://github.com/miloyip/rapidjson/blob/75cee948d44876f22f7215b9bd64733c3d7fee51/example/simplereader/simplereader.cpp

在此 SAX 类型解析中,rapidjson 为解析时接收到的每种数据类型调用事件处理程序。(如文档(https://github.com/miloyip/rapidjson/blob/2e0b3de8d68758b2866fff5f047c893b8a1c4290/doc/sax.md)

我如何区分给定元素是键和对应于该键的值?

最佳答案

只能通过事件顺序来区分键和值。

Reader (SAX Parser) 遇到 JSON 对象时,它会调用处理程序的 StartObject()。然后会有一系列键值对。键必须是 String() 调用,但值可以是任何 JSON 值类型。最后它调用 EndObject()

因此,您需要跟踪解析的状态。对于简单的结构,它只需要一个枚举来表示当前状态。对于递归结构,您可能需要自定义堆栈。

this section ,它显示了将简单对象解析为自定义数据结构的示例。它需要处理 3 个状态。或者,您可以使用计数器来计算 String() 的调用次数,并使用奇数/偶数来确定它是键还是值。

有时使用 SAX API 可能会更加困难。另一方面,它提供了更好的性能和更少的内存开销。


更新时间:2014/9/5

String() 之外添加 Key() 事件的拉取请求已 merged .新界面应简化自定义处理程序的编写。

关于c++ - 使用rapidjson解析JSON字符串时如何区分键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24804410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com