如何在使用rapidjson解析JSON字符串时区分键和值
How to differentiate between key and value while parsing JSON string using rapidjson?
我正在使用"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解析器)遇到JSON对象时,它调用处理程序的StartObject()
。然后会有一个键值对序列。该键必须为String()
调用,但可以是任何JSON值类型。最后调用EndObject()
因此,需要跟踪解析的状态。对于简单的结构,它只需要一个枚举来表示当前状态。对于递归结构,您可能需要自定义堆栈。
在本节中,将展示一个将简单对象解析为自定义数据结构的示例。它需要处理3种状态。或者,您可以使用计数器来记录对String()
的调用次数,并使用奇数/偶数来确定它是键还是值。
使用SAX API有时可能更困难。另一方面,它提供了更好的性能和更少的内存开销。
更新:2014/9/5
在String()
的基础上添加Key()
事件的pull-request已经合并。新的接口将简化编写自定义处理程序。
相关文章:
- 有没有办法让编译器在我放置字符串而不是 nlohmann::json 对象时抛出错误?
- 使用 jsoncpp 解析 json 数组字符串
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 使用 minijson-reader 库读取 JSON 字符串时出现问题
- POCO C++对象到 JSON 字符串序列化
- 将可变参数模板参数转换为 JSON 字符串
- 构造一个类似于JSON文件c++的字符串
- 从 json 字符串将 QVariant 转换为 QList<MyClass>
- C++中的 Json:将数字解析为字符串以避免浮点不准确
- 使用 Json 转换器反序列化 WCF 服务中的C++字符串
- 如何使用 boost 属性树来解析 boost 中 json 字符串中的数组中的元素?
- Boost.Hana JSON 示例:字符串和 decltype(std::to_string(..))之间的区别
- 我想将字符串转换为 Json 格式并返回字符串向量作为答案
- 如何在Visual Studio Code tasks.json中定义C++字符串宏?
- 使用Python将C 结构更改为JSON字符串
- 如何提取由特定模式分开的JSON对象字符串
- 使用RapidJson凝结JSON文件后,如何将输出存储在C 字符串中
- 如何将变量用作原始 JSON 字符串中的数据?
- 当 JSON 值应为 INT 但以字符串类型发送时,RapidJSON 崩溃
- 无法区分 JSON 对象/数组/字符串