问题标签 [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.
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 无法使用该指针。
c++ - RapidJSON:使用 Document 或 Writer 构建的区别
我想用来rapidJSON
构建 JSON 文件。
我注意到有(至少)两个选项可以这样做。
第一种是rapidJSON::Writer
直接使用:
另一个正在使用rapidJSON::Document
:
除了侧面易用性的明显差异Document
和尺寸上更多的类型控制Writer
之外,是否有任何性能差异?两个分配是一样的吗?
c++ - 如何将二进制数据解析为 RapidJson 文档
我有一个客户端服务器设置。客户端将 JSON 文档序列化为二进制格式。客户端将二进制数据发送到服务器。服务器应将 char * 缓冲区转换回 JSON 字符串。
我没有找到使用“文档”或其他流 API 的方法。
例子:
客户端正在序列化以下数据:
服务器代码:
谢谢
c++ - 如何从 rapidjson 获得重复键的值?
我是新手rapidjson
,我有以下json
文字:
我怎样才能提取值:0, 1, 2; 3, 4, 5; 6, 7, 8
按键"ports"
?
提前致谢。
rapidjson - RapidJson解析json数组
如果我有这种 json 怎么办?我正在使用rapidjson
这肯定会使断言失败。
如果它甚至没有键,如何提取数组?
c++ - 将 rapidjson::Value 的元素复制到 std::vector
我需要一个将 a 的所有成员rapidjson::Value
作为std::vector
. 我试图避免每次需要时都写if
s 。IsArray()
不幸的是,以下代码不起作用。
我得到错误push_back is ambiguous。有没有一种简单的方法可以克服这个问题?谢谢。
cocos2d-x - RapidJson:如何从 JSON 中获取所有 Key_names?(cocos2dx)
从 Json 字符串(或文件)中,我想在事先不知道键的情况下收集键/值对。假设我有这个 Json:
我想收集所有关键字符串 "a" 、 "b" 、 "c" 、 "d" 及其各自的值。顺便说一句:我在 Cocos2dX 3.3 中使用 rapidjson 集成。任何想法?
我现在正在使用的是:
但我坚持这一点。
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 事件。
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
(可能会再次遇到内存问题) - 索引文件 - 创建两个文件:一个具有按名称排序的条目,另一个按实体键排序(创建这些文件可能需要更长的时间,因为排序)
- 即使用类似两个的东西
像这样的问题的最佳实践是什么?我应该遵循哪种方法?还有其他想法吗?
c++ - 从 'Type (__cdecl *)(std::istream)' 到 'Type &' 的转换
在 C++ 中调用模板函数时,我无法理解错误的原因。有问题的函数是 rapidjson 的一部分,定义如下:
我的调用代码是:
但是 MS Visual Studio 2013 向我显示了错误:
据我了解,用于实例化的类型与传递给模板函数的类型完全相同。这段代码只是为了演示这个问题——在我的原始代码中,istream 不是来自文件——所以为来自 rapidjson 的文件建议一个不同的读取类并不能解决我的问题。我也想了解,为什么这里会发生这个错误。
有任何想法吗?