web-dev-qa-db-ja.com

JSONCPPファイルへの書き込み

JSONCPPにはライターがありますが、パーサーから情報を取得し、それを文字列またはストリームに出力するだけです。新しいオブジェクト、配列、値、文字列などを変更または作成し、それらをファイルに書き込むにはどうすればよいですか?

24
Yelnats
#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"
                }
        }
}
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では、すべてのJSONデータ型に対応するJson :: Value型のオブジェクトを作成し、結果をJson :: Writer(その派生型の1つ、具体的には)または単純にストリームに渡します。

例:3つの整数の配列をファイルに書き込むには:

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

まず、必要な JSON::Value 。すべてのコンストラクター( first )を確認する必要があります。必要な階層を作成するには、 append およびoperator []オーバーロードを参照してください。オブジェクトには、配列 indicesstring keys の両方にオーバーロードがあります。

JSON値を書き戻す1つの方法は StyledStreamWriter::write および ofstream

書き方はcegprakashの答えを見てください。

3

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"
}
3
Searene