JSONCPP Запись в файлы - PullRequest
       26

JSONCPP Запись в файлы

22 голосов
/ 27 ноября 2010

В JSONCPP есть средство записи, но все, что он делает, это получает информацию из анализатора и затем выводит ее в строку или поток. Как мне заставить его изменять или создавать новые объекты, массивы, значения, строки и так далее и записывать их в файл?

Ответы [ 5 ]

43 голосов
/ 08 января 2013
#include<json/writer.h>

Код:

    Json::Value event;   
    Json::Value vec(Json::arrayValue);
    vec.append(Json::Value(1));
    vec.append(Json::Value(2));
    vec.append(Json::Value(3));

    event["competitors"]["home"]["name"] = "Liverpool";
    event["competitors"]["away"]["code"] = 89223;
    event["competitors"]["away"]["name"] = "Aston Villa";
    event["competitors"]["away"]["code"]=vec;

    std::cout << event << std::endl;

Выход:

{
        "competitors" : 
        {
                "away" : 
                {
                        "code" : [ 1, 2, 3 ],
                        "name" : "Aston Villa"
                },
                "home" : 
                {
                        "name" : "Liverpool"
                }
        }
}
10 голосов
/ 11 мая 2015
#include <json.h>
#include <iostream>
#include <fstream>

void main()
{
    std::ofstream file_id;
    op_file_id.open("file.txt");

    Json::Value value_obj;
    //populate 'value_obj' with the objects, arrays etc.

    Json::StyledWriter styledWriter;
    file_id << styledWriter.write(value_obj);

    file_id.close();
}
9 голосов
/ 27 ноября 2010

AFAICT, вы создаете объекты типа Json :: Value, которые обслуживают все типы данных JSON, и передаете результат в Json :: Writer (один из его производных типов, если быть точным) или просто поток.

Например: записать в файл массив из трех целых чисел:

Json::Value vec(Json::arrayValue);
vec.append(Json::Value(1));
vec.append(Json::Value(2));
vec.append(Json::Value(3));
std::cout << vec;
3 голосов
/ 27 ноября 2010

Сначала необходимо создать желаемое JSON::Value.Вы должны посмотреть на все конструкторы ( first ).Чтобы создать необходимые иерархии, см. append и перегрузки оператора [];существуют перегрузки для обоих массивов индексы и строковые ключи для объектов.

Один из способов вывести значение JSON обратно - использовать StyledStreamWriter::write и ofstream.

См. Ответ cegprakash о том, как его написать.

1 голос
/ 16 октября 2018

Json::StyledWriter устарела, вы можете использовать Json::StreamWriterBuilder для записи json в файлы.

Json::Value rootJsonValue;
rootJsonValue["foo"] = "bar";

Json::StreamWriterBuilder builder;
builder["commentStyle"] = "None";
builder["indentation"] = "   ";

std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
std::ofstream outputFileStream("/tmp/test.json");
writer -> write(rootJsonValue, &outputFileStream);

json будет записан в /tmp/test.json.

$ cat /tmp/test.json

{
    "foo" : "bar"
}
...