c++ - 使用 rapidjson 解析 json 文件的最简单方法是什么?
问题描述
所以我刚刚熟悉,rapidjson.h
但我找不到解析*.json
文件的基本示例代码。
我找到了官方的 [turorial][1]。但是在这里,他们解析存储在 C 字符串中的 json。我知道这个字符串应该是什么样子,但我懒得制作一个自定义解析器只是为了将我的文件转换为这个字符串。我的意思是我有点希望 rapidjson 应该为我做到这一点。如果我错了,请纠正我。
我发现最接近我需要的是这里如何使用 rapidjson 读取 json 文件并输出到 std::string?
因此,我真的很惊讶我不能只做这样的事情(*.json
文件与我的程序在同一个文件夹中):
rapidjson::Document d;
d.Parse("myJson.json");
我的 1. 问题是:
我必须在上面的示例中使用std::ifstream
并rapidjson::IStreamWrapper
获得我的Document
喜欢吗?还有其他尽可能简单的替代方法吗?
是什么R
意思std::ifstream ifs { R"(C:\Test\Test.json)" };
以及如何将C:\Test\Test.json
字符串更改为const char*
变量?
因为这行不通。
const char* str = "C:\Test\Test.json";
std::ifstream ifs { R"(str)" }; //error
std::ifstream ifs { R(str) }; //error
std::ifstream ifs{ (str) }; //ok but I don't like it
[1]:https://rapidjson.org/md_doc_tutorial.html
解决方案
您可以使用FileReadStream
andParseStream
代替IStreamWrapper
. 根据文档,FileReadStream
比IStreamWrapper
.
这R
意味着它是一个原始字符串文字。没有它,反斜杠将被解释为转义序列的开始,您必须像这样编写它以使其正确:
"C:\\Test\\Test.json"
或者您可以使用正斜杠:
"C:/Test/Test.json"
推荐阅读
- xml -
元素作为子元素 - kubernetes - 使用 kubernetes java 客户端获取 k8s 服务端点
- amazon-web-services - AWS PHP 开发工具包 - Polly 神经语音 (NTTS)
- oracle - Oracle Service Cloud Chat 按engagementID 获取附件
- java - 无法设置 Test.APIKeyAuthToken
- java - spring boot 在第一次重试方法成功后执行第二次重试方法
- typescript - Sentry:beforeSend 被调用多次
- bitlocker - 开发像 bitlocker 这样的东西所需的技术
- c - 使用管道在Unix中同步N个子进程以打印消息
- algorithm - 使用动态 FPS 在游戏引擎中渲染视频