首页 > 解决方案 > 使用 rapidjson 解析 json 文件的最简单方法是什么?

问题描述

所以我刚刚熟悉,rapidjson.h但我找不到解析*.json文件的基本示例代码。

我找到了官方的 [turorial][1]。但是在这里,他们解析存储在 C 字符串中的 json。我知道这个字符串应该是什么样子,但我懒得制作一个自定义解析器只是为了将我的文件转换为这个字符串。我的意思是我有点希望 rapidjson 应该为我做到这一点。如果我错了,请纠正我。

我发现最接近我需要的是这里如何使用 rapidjson 读取 json 文件并输出到 std::string?

因此,我真的很惊讶我不能只做这样的事情(*.json文件与我的程序在同一个文件夹中):

rapidjson::Document d;
d.Parse("myJson.json");

我的 1. 问题是:

我必须在上面的示例中使用std::ifstreamrapidjson::IStreamWrapper获得我的Document喜欢吗?还有其他尽可能简单的替代方法吗?

我的 2. 问题是:(如果我可以评论上面的帖子,这个问题会容易得多)

是什么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

标签: c++jsonparsingrapidjson

解决方案


您可以使用FileReadStreamandParseStream代替IStreamWrapper. 根据文档,FileReadStreamIStreamWrapper.

R意味着它是一个原始字符串文字。没有它,反斜杠将被解释为转义序列的开始,您必须像这样编写它以使其正确:

"C:\\Test\\Test.json"

或者您可以使用正斜杠:

"C:/Test/Test.json"

推荐阅读