在使用 RapidJSON 解析文档时跳过某些字段
Skip certain fields while parsing a document with RapidJSON
我正在使用RapidJSON来解析大型GeoJSON文件。这些文件(以及解析后的内存)中的大多数内容都是巨大的坐标数组。对于我的应用程序,我对这些不感兴趣。我宁愿在解析时跳过它们(而不是为它们分配内存)。根据使用 SAX API 的一些测试,我预计这将大约将解析速度提高一倍。
我最初的想法是编写一个自定义处理程序。我必须使用自己的堆栈构建自己的 Value 对象,但是,这将复制 GenericDocument
类所做的工作。
我的下一个想法是将GenericDocument
子类化。但是,它的ParseStream
和处理程序方法并不virtual
,所以我无法使用它自己的方法。我可以实现我自己的ParseStream
,但stack_
字段是私有的,所以即使是子类也无法访问它。
具有自己的堆栈的自定义处理程序是正确的方法吗?以前有人做过这样的事情吗?
在 RapidJSON 中实现 JSON 模式验证器功能期间,我为 Document::Populate(generator)
添加了一个新的 API,它使用生成器来填充文档的内容。它应该适合这个。
目前它显示在这里:
// Parse JSON from reader, validate the SAX events, and store in d.
Document d;
SchemaValidatingReader<kParseDefaultFlags, FileReadStream, UTF8<> > reader(is, schema);
d.Populate(reader);
d.Populate(generator)
将调用generator(d)
,然后generator
生成 SAX 事件并发送给 d
。
因此,应该可以编写一个自定义 SAX 处理程序,该处理程序筛选一些 SAX 事件,并将事件转发到文档。
一个例子可能更好。您可能会删除问题。
更新:添加了两个示例。
- filterkey:一个命令行工具,用于删除具有用户指定键的所有值。
- filterkeydom:与上面的工具相同,但它演示了如何使用生成器来填充
Document
。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 如何在文档文件夹中创建目录
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 关于类的 Python 文档 - 对C++的引用不正确
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- C++/autoconf 等效于文档库要求.txt的要求是什么?
- 修改Mongodb源代码以禁用文档的自动生成"_id"字段
- 使用C 从文本行中提取字段和值
- 在使用 RapidJSON 解析文档时跳过某些字段