首页 > 解决方案 > 如何读取 C++ 中的 JSON 内容?

问题描述

我正在尝试读取具有有效 JSON 内容但不是字符串的文本文件。如果它是字符串转储,则以下代码可以正常工作。例如 - 如果文件内容是这样的,"{ \"happy\": true, \"pi\": 3.141 }"那么它将在没有错误的情况下解析。现在我想找到一种最小化这些转换的方法?如何使用任何标准库将 JSON 内容转换为 C++ 中的字符串转储?我现在正在使用nlohmann,但似乎这需要额外的编码。如果我可以用简单的代码破解这个,请教育我。

我的代码

#include <iostream>
#include <fstream>
#include <streambuf>
#include <nlohmann/json.hpp>

using namespace std;
using json = nlohmann::json;

int main()
{
    std::fstream f_json("C://json.txt");

    json jFile;
    try {
        jFile = json::parse(f_json);
    }
    catch (json::parse_error &e)
    {
        std::cerr << e.what() << std::endl;
    }
    return 0;
}

我们的客户端生成如下所示的 JSON 文件。

{
    "happy": true,
    "pi": 3.141
  }

标签: c++jsonc++11nlohmann-json

解决方案


我喜欢使用ThorsSerializer。免责声明是我写的。

#include "ThorSerialize/JsonThor.h"
#include "ThorSerialize/SerUtil.h"
#include <sstream>
#include <iostream>
#include <string>

struct MyObj
{
    bool        happy;
    double      pi;
};
ThorsAnvil_MakeTrait(MyObj, happy, pi);

示例用法:

int main()
{
    using ThorsAnvil::Serialize::jsonImport;
    using ThorsAnvil::Serialize::jsonExport;

    std::stringstream file(R"({ "happy": true, "pi": 3.141 })");

    MyObj   data;
    file >> jsonImport(data);


    std::cout << jsonExport(data) << "\n";
}

输出:

{
    "happy": true,
    "pi": 3.141
}

对于文件流,它的工作原理相同。但是您不应该转义"文件中的字符。


推荐阅读