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++?
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
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. –