Как читать содержимое JSON, как оно есть в C ++? - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь прочитать текстовый файл с допустимым содержимым 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 ]

0 голосов
/ 11 июля 2018

Мне нравится использовать 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
}

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

0 голосов
/ 25 мая 2018

Мой файл находится под C:/test.json, поэтому он не имел разрешения открыть его.Теперь я поместил его в соответствующую папку.Теперь работает нормально.

...