web-dev-qa-db-fra.com

JSONCPP Écriture dans des fichiers

JSONCPP a un écrivain, mais tout ce qu'il semble faire est d'obtenir des informations de l'analyseur puis de les produire dans une chaîne ou un flux. Comment puis-je le faire modifier ou créer de nouveaux objets, tableaux, valeurs, chaînes, etc. et les écrire dans le fichier?

24
Yelnats
#include<json/writer.h>

Code:

    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;

Production:

{
        "competitors" : 
        {
                "away" : 
                {
                        "code" : [ 1, 2, 3 ],
                        "name" : "Aston Villa"
                },
                "home" : 
                {
                        "name" : "Liverpool"
                }
        }
}
44
cegprakash
#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();
}
10
kk-robot

AFAICT, vous créez des objets de type Json :: Value, qui s'adresse à tous les types de données JSON, et passez le résultat à un Json :: Writer (l'un de ses types dérivés, pour être spécifique), ou simplement à un flux.

Par exemple: pour écrire un tableau de trois entiers dans un fichier:

Json::Value vec(Json::arrayValue);
vec.append(Json::Value(1));
vec.append(Json::Value(2));
vec.append(Json::Value(3));
std::cout << vec;
9
Marcelo Cantos

Tout d'abord, vous devez créer le JSON::Value . Vous devriez regarder tous les constructeurs ( en premier ). Pour créer les hiérarchies nécessaires, voir append et l'opérateur [] surcharges; il y a des surcharges pour les indices de tableau et les clés de chaîne pour les objets.

Une façon d'écrire la valeur JSON est d'utiliser StyledStreamWriter::write et ofstream .

Voir la réponse de cegprakash pour savoir comment l'écrire.

3
Matthew Flaschen

Json::StyledWriter est obsolète, vous pouvez utiliser Json::StreamWriterBuilder pour écrire json dans des fichiers.

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);

Le json sera écrit dans /tmp/test.json.

$ cat /tmp/test.json

{
    "foo" : "bar"
}
3
Searene