Как читать содержимое JSON, как оно есть в C++?
Я пытаюсь прочитать текстовый файл с допустимым содержимым JSON, но без строки. Приведенный ниже код работает нормально, если это строковый дамп. Например - если содержимое файла выглядит так "{ \"happy\": true, \"pi\": 3.141 }"
тогда будет разбираться без ошибок. Теперь я хочу найти способ, который минимизирует эти преобразования? Как преобразовать содержимое JSON в дамп строки в C++, используя любую стандартную библиотеку lib? я использую 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
}
2 ответа
Мой файл находится под C:/test.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
}
Это работает так же для файлового потока. Но вы не должны избегать "
символы в файле.