2012-10-27 79 views
6

Ví dụ:Cách phân tích đối tượng lồng nhau/mảng bằng cách sử dụng trình phân tích cú pháp jsoncpp trong C++?

Json::Reader reader; 
    Json::Value val; 
    ifstream file("JSON/test.json"); 
    bool success = reader.parse(file, val, false); 
    vector<string> obj = val.getMemberNames(); 

    for (int i = 0; i < val.size(); i++) 
    { 
     // switch type of value 
     switch (val.get(obj.at(i), "default").type()) 
     { 
      case stringValue: 
       cout << "I'm string" << endl; 
       ... need to save **membername** and **value** 
       break; 
      case intValue: 
       cout << "I'm int" << endl; 
       ... need to save **membername** and **value** 
       break; 
      case nullValue: 
       cout << "I'm null" << endl; 
       break; 
      case arrayValue: 
       ... code to parse an array (with nested sure) ... 
       ... need to save 
       break; 
      case objectValue: 
       ... code to parse an object (with nested sure) ... 
       ... need to save 
       break; 
     } 
    } 

Ví dụ JSON tập tin (JSON/test.json):

{ 
    "layout": "fit", 
    "xtype": "viewport", 
    "height": 200, 
    "style": { 
       "backgroundColor": "46f0a8" 
      }, 

      "items": 
      [ 
      { 
       "title": "Management Console", 
       "padding": "10 10 10 10", 
       "bodyPadding": 10, 
       "autoScroll": true, 
       "items2": [1, 2, 3] 
      } 
      ] 
} 

Trong mảng mục, chúng ta có thể thấy một mảng (lồng nhau) gọi là items2 .

thể trải nghiệm sau cho mảng:

array[Jacob, Joseph] or 
array[{name: Jacob, name: Joseph}] or 
array[{name: Jacob}, {name: Joseph}] 

Đối với đối tượng đó là tương tự. Trong mỗi trường, tất nhiên có thể là nhiều đối tượng/mảng lồng nhau. Làm thế nào để lưu dữ liệu trong các biến C++?

+0

Khá rõ ràng đối với tôi, bạn thực sự yêu cầu điều gì. Tôi thấy 3 câu hỏi. Làm cách nào để xử lý dữ liệu 'mảng' và dữ liệu' đối tượng' trong thư viện 'jsoncpp'? Làm thế nào để tôi thích ứng với các quy ước lưu trữ dữ liệu khác nhau? Làm cách nào để xử lý các trường hợp chung/lồng nhau? – luk32

+0

Không rõ liệu bạn có muốn phân tích cú pháp thành một lớp C++ được xác định trước hay bạn muốn phân tích cú pháp dữ liệu JSON tùy ý. Đối với trường hợp thứ hai, thực sự không có điểm chuyển đổi 'JSON :: Value' thành các định dạng khác; chỉ sử dụng 'JSON :: Value' trực tiếp. –

Trả lời

0

Bạn sẽ muốn làm cho hàm phân tích cú pháp chính của bạn đệ quy. Sau đó, sử dụng các lớp STL như vectơ cho phép bạn tự động phân bổ thêm dung lượng cho dữ liệu của mình.

Các vấn đề liên quan