2013-01-23 36 views
10

मैं rapidJSONrapidJSON structs

का उपयोग कर निम्नलिखित JSON उत्पादन
{ 
    "year": 2013, 
    "league": "national", 
    "teams": [ 
     { 
      "teamname": "reds", 
      "teamcity": "cincinnati", 
      "roster": [ 
       { 
        "playername": "john", 
        "position": "catcher" 
       }, 
       { 
        "playername": "joe", 
        "position": "pitcher" 
       } 
      ] 
     } 
    ] 
} 

यह मान्य JSON ... JSONLint.com पर सत्यापित है मैं जानता हूँ कि एक दस्तावेज़ बनाने का तरीका बनाने के लिए सक्षम होना चाहते हैं की एक सरणी जोड़ने और "वर्ष" और "लीग" जोड़ने के लिए AddMember का उपयोग करें।

मैं समझ नहीं सकता है और कैसे एक सरणी "टीमों" या "रोस्टर" की तरह एक संरचना है कि जोड़ने के लिए में से किसी उदाहरण नहीं देखा है

कैसे एक ऐड "टीमों" जो संरचनाओं की एक सरणी है करता है ? किसी भी मदद या मुझे एक उदाहरण के लिए इंगित करना बहुत अच्छा होगा।

+0

जवाब – warunanc

उत्तर

42

मान लें कि हमारे पास std :: स्ट्रिंग & लौटने वाले रोस्टर क्लास पर प्लेयर नाम() और पोस्टियन() एक्सेसर फ़ंक्शंस वाला std :: वेक्टर रोस्टर है।

rapidjson::Document jsonDoc; 
jsonDoc.SetObject(); 
rapidjson::Value myArray(rapidjson::kArrayType); 
rapidjson::Document::AllocatorType& allocator = jsonDoc.GetAllocator(); 

std::vector<Roster*>::iterator iter = roster.begin(); 
std::vector<Roster*>::iterator eiter = roster.end(); 
for (; iter != eiter; ++iter) 
{ 
    rapidjson::Value objValue; 
    objValue.SetObject(); 
    objValue.AddMember("playername", (*iter)->PlayerName().c_str(), allocator); 
    objValue.AddMember("position", (*iter)->Position().c_str(), allocator); 

    myArray.PushBack(objValue, allocator); 
} 

jsonDoc.AddMember("array", myArray, allocator); 
rapidjson::StringBuffer strbuf; 
rapidjson::Writer<rapidjson::StringBuffer> writer(strbuf); 
jsonDoc.Accept(writer); 

const char *jsonString = strbuf.GetString(); // to examine the encoding... 

यह आपको दस्तावेज़ में संरचनाओं की एक श्रृंखला प्राप्त करेगा। बाकी संरचना को एक दूसरे के भीतर तेजी से घोंसले की वस्तुओं को घूमने के लिए और अपने जटिल ऑब्जेक्ट पेड़ को बनाने के लिए AddMember() का उपयोग करने के लिए आपको बस इतना करना होगा। उम्मीद है की यह मदद करेगा।

+2

अच्छा एक स्वीकार कर लिया है चाहिए:

Value tmp; tmp.SetString((*iter)->Position().c_str(), allocator); objValue.AddMember("position", tmp, allocator); 

यहाँ एक ट्यूटोरियल है! दुर्भाग्यवश उपयोगकर्ता ने आपका जवाब स्वीकार नहीं किया, वैसे भी आपने मेरा दिन बनाया! :) – Zappescu

+0

बिल्कुल सही मेरे समय बचाया। आपके उत्तर –

+0

को स्वीकार करना चाहिए था यह खींचने के लिए एक ठोस दौर है। –

10

वीएस2012/रैपिडज़सन संस्करण 0.1 में, स्ट्रिंगबफर से आउटपुट दस्तावेज़ के बाद निम्न कथन अपठनीय कोड प्राप्त होता है।

objValue.AddMember("position", (*iter)->Position().c_str(), allocator); 

कुछ घंटों के बाद खोदने के बाद, मुझे पता चला कि इसे सही ढंग से कैसे किया जाए। http://miloyip.github.io/rapidjson/md_doc_tutorial.html

1
rapidjson::StringBuffer s; 
    rapidjson::Writer<rapidjson::StringBuffer> writer(s); 

    writer.StartObject();    

    std::string year("year"); 
    writer.String(year.c_str(), static_cast<rapidjson::SizeType>(year.length())); 
    writer.Int(2013); 

    std::string league("league"); 
    writer.String(league.c_str(), static_cast<rapidjson::SizeType>(league.length())); 
    std::string national("national"); 
    writer.String(national.c_str(), static_cast<rapidjson::SizeType>(national.length())); 


    std::string teams("teams"); 
    writer.String(teams.c_str(), static_cast<rapidjson::SizeType>(teams.length())); 

    writer.StartArray(); 
    writer.StartObject(); 

    std::string teamname("teamname"); 
    writer.String(teamname.c_str(), static_cast<rapidjson::SizeType>(teamname.length())); 
    std::string reds("reds"); 
    writer.String(reds.c_str(), static_cast<rapidjson::SizeType>(reds.length())); 

    std::string teamcity("teamcity"); 
    writer.String(teamcity.c_str(), static_cast<rapidjson::SizeType>(teamcity.length())); 
    std::string cincinnati("cincinnati"); 
    writer.String(cincinnati.c_str(), static_cast<rapidjson::SizeType>(cincinnati.length())); 

    std::string roster("roster"); 
    writer.String(roster.c_str(), static_cast<rapidjson::SizeType>(roster.length())); 

    writer.StartArray(); 

    writer.StartObject(); 
    std::string playername("playername"); 
    writer.String(playername.c_str(), static_cast<rapidjson::SizeType>(playername.length())); 
    std::string john("john"); 
    writer.String(john.c_str(), static_cast<rapidjson::SizeType>(john.length())); 

    std::string position("position"); 
    writer.String(position.c_str(), static_cast<rapidjson::SizeType>(position.length())); 
    std::string catcher("catcher"); 
    writer.String(catcher.c_str(), static_cast<rapidjson::SizeType>(catcher.length())); 
    writer.EndObject(); 

    // can add one more object in the same manner 
    // with player name and position 

    writer.EndArray(); 

    writer.EndObject(); 

    writer.EndArray(); 
    writer.EndObject(); 


s.GetString(); 

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

  • कोई संबंधित समस्या नहीं^_^