2010-11-27 12 views
17

JSONCPP के पास एक लेखक है, लेकिन ऐसा लगता है कि यह पार्सर से जानकारी प्राप्त करता है और फिर इसे स्ट्रिंग या स्ट्रीम में आउटपुट करता है। मैं इसे कैसे बदल सकता हूं या नई ऑब्जेक्ट्स, सरणी, मान, तार, et cetera बना सकता हूं और उन्हें फ़ाइल में लिख सकता हूं?JSONCPP फ़ाइलों को लिखना

उत्तर

9

AFAICT, आप जेसन :: वैल्यू के प्रकार बनाते हैं, जो सभी JSON डेटा-प्रकारों को पूरा करता है, और परिणाम को जेसन :: राइटर (इसके व्युत्पन्न प्रकारों में से एक, विशिष्ट होने के लिए) पास करता है, या बस एक धारा के लिए।

उदा .: एक फाइल करने के लिए तीन पूर्णांकों की एक सरणी लिखने के लिए:

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' के बजाय' 'स्ट्रीम' का उपयोग करें। –

+0

येल्नाट्स, फिर इसे std :: cout की बजाय फ़ाइल में पाइप करें। – TimZaman

3

सबसे पहले, आप वांछित JSON::Value बनाना होगा। आपको सभी रचनाकारों को देखना चाहिए (first)। आवश्यक पदानुक्रम बनाने के लिए, append और ऑपरेटर [] अधिभार देखें; वस्तुओं के लिए दोनों सरणी indices और string keys दोनों के लिए ओवरलोड हैं।

JSON मान वापस लिखने का एक तरीका StyledStreamWriter::write और ofstream का उपयोग कर रहा है।

इसे लिखने के लिए cegprakash का उत्तर देखें।

+0

हाँ मैंने मार्सेलो के जवाब को पढ़ने के बाद इस बारे में सोचा। यह काम करता हैं। – Yelnats

+0

@ येलनेट्स तो आप इसे उचित उत्तर के रूप में क्यों चिह्नित नहीं करते? –

+1

'स्टाइलस्ट्रीमवाइटर' को बहिष्कृत किया गया है। यदि आपको अनुकूलन की आवश्यकता है, तो ['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

संबंधित मुद्दे