2010-11-27 51 views
17

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

答えて

9

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; 
+0

しかし、私は.jsonファイルにそれを書きたいです。 – Yelnats

+9

そして、 'cout'の代わりに' ofstream'を使います。 –

+0

Yelnats、std :: coutの代わりにファイルにパイプします。 – TimZaman

3

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

JSON値を書き戻す方法の1つは、StyledStreamWriter::writeofstreamです。

これを書き込む方法については、cegprakashの回答を参照してください。

+0

ええ、私はマルセロの答えを読んだ後、これについて考えました。できます。 – Yelnats

+0

@Yelnatsだから、それを適切な回答としてマークしてみませんか? –

+1

'StyledStreamWriter'は廃止予定です。カスタマイズが必要な場合は、['StreamWriterBuilder'](http://open-source-parsers.github.io/jsoncpp-docs/doxygen/class_json_1_1_stream_writer_builder.html)を使用してください。それとも単に他の答えに従ってください。 – cdunn2001

35
#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" 
       } 
     } 
} 
+3

これは本当にいいね。 .appendメソッドでintの代わりにクラスを追加するのはどうですか? – malber

7
#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(); 
} 
+0

ポストコードだけでなく、答えを説明すれば分かりやすいでしょう。 – SuperBiasedMan

関連する問題