2010-11-27 29 views
17

JSONCPP bir yazara sahip, ancak tüm yapmak için ayrıştırıcıdan bilgi almak ve daha sonra bir dizeye veya bir akışa çıktı. Yeni nesneleri, dizileri, değerleri, dizeleri, dizgileri değiştirip değiştirebilir ve dosyaya nasıl yazabilirim?JSONCPP Dosyalara yazılıyor

cevap

9

AFAICT, tüm JSON veri türlerine hitap eden Json :: Value türünde nesneler oluşturursunuz ve sonucu bir Json :: Yazıcısına (türetilmiş türlerinden biri, spesifik olması için) geçirmeniz yeterlidir. bir akışa.

Örn .: Bir dosyaya üç tamsayı dizisi yazmaya:

Json::Value vec(Json::arrayValue); 
vec.append(Json::Value(1)); 
vec.append(Json::Value(2)); 
vec.append(Json::Value(3)); 
std::cout << vec; 
+0

Ama .json dosyasına yazmak istiyorum. – Yelnats

+9

Sonra "cout" yerine "ofstream" kullanın. –

+0

Yelnats, daha sonra std :: cout yerine bir dosyaya aktarın. – TimZaman

3

İlk olarak, istenilen JSON::Value oluşturmak zorunda. Tüm kuruculara bakmalısınız (first). Gerekli hiyerarşileri oluşturmak için, bkz. append ve operatör [] aşırı yükler; Nesneler için her iki dizi de indices ve string keys için aşırı yükleme var.

JSON değerini geri yazmanın bir yolu, StyledStreamWriter::write ve ofstream kullanıyor. Cegprakash'ın nasıl yazılacağı konusundaki yanıtına bakın.

+0

Evet, Marcelo'nun cevabını okuduktan sonra bunu düşündüm. İşe yarıyor. – Yelnats

+0

@Yelnats Peki neden uygun bir cevap olarak işaretlemiyorsunuz? –

+1

'StyledStreamWriter 'kullanımdan kaldırıldı. Özelleştirmeye ihtiyacınız varsa, ['StreamWriterBuilder'] kullanın (http://open-source-parsers.github.io/jsoncpp-docs/doxygen/class_json_1_1_stream_writer_builder.html). Ya da sadece diğer cevapları burada takip edin. – cdunn2001

35
#include<json/writer.h> 

Kodu:

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; 

Çıktı:

{ 
     "competitors" : 
     { 
       "away" : 
       { 
         "code" : [ 1, 2, 3 ], 
         "name" : "Aston Villa" 
       }, 
       "home" : 
       { 
         "name" : "Liverpool" 
       } 
     } 
} 
+3

Bu gerçekten hoş görünüyor. .append yöntemiyle int yerine sınıf eklemeye ne dersiniz? – 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

Sadece kodunuzu değil, cevabınızı açıklarsanız daha kolay anlaşılır. – SuperBiasedMan

İlgili konular