c++ - 如何读取 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
}
解决方案
我喜欢使用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
}
对于文件流,它的工作原理相同。但是您不应该转义"
文件中的字符。
推荐阅读
- python - 与 Pandas 争吵转移 DataFrame
- flutter - 缓存子小部件与重新创建它们
- firebase - Firestore 中的多个 orderBy
- c++ - C++ 套接字 API“心跳”
- sql - 如何使用 SQL 和 Postgres 替换字符串的第一个字母?
- bash - Bash - 如何在文件中获取围绕子字符串的字符串
- python - 按降序打印相应变量的值
- dask - 我正在使用 Dask 在多个数据集上使用 Snorkel 应用 LabelingFunction,但它似乎需要很长时间。这是正常的吗?
- appium - 如何打开和关闭应用程序并仍然记录每个测试用例?(RobotFramework/AppiumLibrary)
- python - 熊猫散点图不按列值着色