问题标签 [rapidjson]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1299 浏览

c++ - 使用 rapidjson 和 ATL CString

我正在尝试使用具有 Microsoft ATL CString 类型的rapidjson库,如下例所示。

这会因编译器错误而失败

“rapidjson::GenericValue::GenericValue(rapidjson::GenericValue &&)”:无法将参数 1 从“CString”转换为“rapidjson::Type”rapidjson document.h 1020

这确实意味着需要在 CString 和 rapidjson 需要的格式之间进行转换。我知道 rapidjson 在内部使用 wchar_t 作为其函数的 UTF16 版本的编码,但是我不确定如何以 rapidjson 能够将字符串用作它使用由 _T 宏定义的字符串。

我在此处查看了有关在字符串类型之间转换的 msdn 资源,但这仅提供了一种方法来返回指向 wchar_t 数组的第一个成员的指针,然后 rapidjson 无法使用该指针。

0 投票
1 回答
1150 浏览

c++ - RapidJSON:使用 Document 或 Writer 构建的区别

我想用来rapidJSON构建 JSON 文件。
我注意到有(至少)两个选项可以这样做。
第一种是rapidJSON::Writer直接使用:

另一个正在使用rapidJSON::Document

除了侧面易用性的明显差异Document和尺寸上更多的类型控制Writer之外,是否有任何性能差异?两个分配是一样的吗?

0 投票
0 回答
1756 浏览

c++ - 如何将二进制数据解析为 RapidJson 文档

我有一个客户端服务器设置。客户端将 JSON 文档序列化为二进制格式。客户端将二进制数据发送到服务器。服务器应将 char * 缓冲区转换回 JSON 字符串。

我没有找到使用“文档”或其他流 API 的方法。

例子:

客户端正在序列化以下数据:

服务器代码:

谢谢

0 投票
1 回答
952 浏览

c++ - 如何从 rapidjson 获得重复键的值?

我是新手rapidjson,我有以下json文字:

我怎样才能提取值:0, 1, 2; 3, 4, 5; 6, 7, 8按键"ports"

提前致谢。

0 投票
1 回答
1755 浏览

rapidjson - RapidJson解析json数组

如果我有这种 json 怎么办?我正在使用rapidjson

这肯定会使断言失败。

如果它甚至没有键,如何提取数组?

0 投票
2 回答
2294 浏览

c++ - 将 rapidjson::Value 的元素复制到 std::vector

我需要一个将 a 的所有成员rapidjson::Value作为std::vector. 我试图避免每次需要时都写ifs 。IsArray()不幸的是,以下代码不起作用。

我得到错误push_back is ambiguous。有没有一种简单的方法可以克服这个问题?谢谢。

0 投票
1 回答
4955 浏览

cocos2d-x - RapidJson:如何从 JSON 中获取所有 Key_names?(cocos2dx)

从 Json 字符串(或文件)中,我想在事先不知道键的情况下收集键/值对。假设我有这个 Json:

我想收集所有关键字符串 "a" 、 "b" 、 "c" 、 "d" 及其各自的值。顺便说一句:我在 Cocos2dX 3.3 中使用 rapidjson 集成。任何想法?

我现在正在使用的是:

但我坚持这一点。

0 投票
2 回答
1499 浏览

c++11 - Libcurl + rapidjson 用于流式反序列化?

我一直在扯头发(不过一开始并不多),试图找出一种方法来访问 Web 服务,然后解析和反序列化 json 块,同时解析到我的对象中而不存储整个文档(500mb+)。实际上,我正在尝试使用 SAX 风格的解析将 libcurl 和 rapidjson 连接到我的类中。

也许我在想这个错误,但我目前的想法是在 curl_writeback 期间将接收到的数据添加到 json 文本流中。我正在努力的是如何启动然后让 rapidjson 解析引擎等待来自 curl 写回的下一个数据块。在处理未完成的令牌之前暂停,直到接收到新的流缓冲区。我不想附加缓冲区,因为我想释放以前的缓冲区。

有没有人这样做过?

这里有一些代码来说明这个概念......但显然不完整(而且可能全错了!)

这是将信息传递给 curl_write 的结构,以便它知道如何对解析器进行回调。

然后在发起请求之前,我填充结构如下:

ParseHandler 是 rapidjson 进行 SAX 解析所需的类。这个想法是在 curl_write 期间调用 rapidjson 解析器(以某种方式):

我当然希望有比这更简单的答案。

这是上下文的完整代码:

编辑:

理想情况下,_tmain 中的 http.Get 函数将传入对要反序列化的对象的引用。该对象将在各种回调中接收来自 rapidjson 的所有 SAX 事件。

0 投票
4 回答
1692 浏览

c++ - 如何有效地解析 C++ 中的大数据 json 文件(wikidata)?

我有一个大约 36 GB 的 json 文件(来自 wikidata),我想更有效地访问它。目前我在 C++ 中使用 rapidjsons SAX 风格的 API - 但解析整个文件在我的机器上需要大约 7415200 毫秒(=120 分钟)。我想根据 json 对象内的两个主键之一(“名称”或“实体键”-> 即“堆栈溢出”或“Q549037”)访问此文件中的 json 对象。这意味着我必须在最坏的情况下解析当前的整个文件。

所以我想到了两种方法:

  • 将大文件拆分为数十亿个小文件 - 文件名指示名称/实体键(即 Q549037.json / Stack_Overflow.json 或 Q549037#Stack_Overflow.json) -> 不确定存储中的过载
  • ftell()从主键到文件中的位置建立某种索引。建立索引大约需要 120 分钟(就像现在解析一样),但访问应该更快
    • 即使用类似两个的东西std::unorderedmap(可能会再次遇到内存问题)
    • 索引文件 - 创建两个文件:一个具有按名称排序的条目,另一个按实体键排序(创建这些文件可能需要更长的时间,因为排序)

像这样的问题的最佳实践是什么?我应该遵循哪种方法?还有其他想法吗?

0 投票
1 回答
240 浏览

c++ - 从 'Type (__cdecl *)(std::istream)' 到 'Type &' 的转换

在 C++ 中调用模板函数时,我无法理解错误的原因。有问题的函数是 rapidjson 的一部分,定义如下:

我的调用代码是:

但是 MS Visual Studio 2013 向我显示了错误:

据我了解,用于实例化的类型与传递给模板函数的类型完全相同。这段代码只是为了演示这个问题——在我的原始代码中,istream 不是来自文件——所以为来自 rapidjson 的文件建议一个不同的读取类并不能解决我的问题。我也想了解,为什么这里会发生这个错误。

有任何想法吗?