Как читать содержимое 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
}

Это работает так же для файлового потока. Но вы не должны избегать " символы в файле.

Другие вопросы по тегам