2013-10-25 58 views
4

我有一個樣本文件 「sample.json」,其中包含3 JSON對象如何使用jsoncpp

{ 「A」 讀取多個JSON對象: 「something1」, 「B」: 「something2」, 「C」 : 「something3」, 「d」: 「something4」} { 「A」: 「something5」, 「B」: 「something6」, 「C」: 「something7」, 「d」: 「something8」} { 「A」 : 「something9」, 「B」: 「something10」, 「C」: 「something11」, 「d」: 「something12」}

(有在上述文件中沒有換行)

我想讀所有三個使用jsoncpp的json對象。

我能夠讀取第一個對象,但沒有讀取它。

這裏是我的代碼

Json::Value root; // will contains the root value after parsing. 
    Json::Reader reader; 
    std::ifstream test("sample.json", std::ifstream::binary); 
    bool parsingSuccessful = reader.parse(test, root, false); 
    int N = 3; 
    if (parsingSuccessful) 
    { 
     for (size_t i = 0; i < N; i++) 
     { 
       std::string A= root.get("A", "ASCII").asString(); 
       std::string B= root.get("B", "ASCII").asString(); 
       std::string C= root.get("C", "ASCII").asString(); 
       std::string D= root.get("D", "ASCII").asString(); 
       //print all of them 
     } 
    } 

回答

6

相關部分,我相信你的JSON文件在語法上是無效的。請參閱www.json.org。您的文件應包含一個單獨的對象陣列,例如,你的情況應該是這樣的:

[{"A":"something1","B":"something2","C":"something3","D":"something4"}, 
{"A":"something5","B":"something6","C":"something7","D":"something8"}, 
{"A":"something9","B":"something10","C":"something11","D":"something12"}] 

然後你就可以訪問你的循環數組中的每個對象:

for (size_t i = 0; i < root.size(); i++) 
{ 
    std::string A = root[i].get("A", "ASCII").asString(); 
    // etc. 
} 
1

這裏是一個問題的解決方案,假裝有有間換行符每個對象(並且沒有行是空白或格式不正確):

// Very simple jsoncpp test 
#include <json/json.h> 
#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    Json::Value root; 
    Json::Reader reader; 
    ifstream test("sample.json", ifstream::binary); 
    string cur_line; 
    bool success; 

    do { 
     getline(test, cur_line); 
     cout << "Parse line: " << cur_line; 
     success = reader.parse(cur_line, root, false); 
     cout << root << endl; 
    } while (success); 

    cout << "Done" << endl; 
}