2012-10-27 210 views
6

例如:如何在C++中使用jsoncpp解析器解析嵌套的对象/数组?

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; 
     } 
    } 

JSON文件(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] 
      } 
      ] 
} 

在阵列,我们可以看到另一个阵列(嵌套的)称为items2

可能会遇到阵列以下:

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

对于对象是相似的。在每个字段中,当然可以是许多嵌套对象/数组。如何将数据保存在C++变量中?

+0

这对我来说还不是很清楚,你真正要求什么。我看到3个问题。如何在'jsoncpp'库中处理'array'数据和'object'数据?我如何适应不同的数据存储惯例?我如何处理一般/嵌套情况? – luk32

+0

目前还不清楚是要解析为预定义的C++类,还是要解析任意的JSON数据。对于后一种情况,将JSON :: Value转换为其他格式确实没有意义。直接使用'JSON :: Value'即可。 –

回答

0

你会想让你的主要解析函数递归。然后使用像矢量这样的STL类,它允许为数据动态分配更多的存储空间。