2012-10-27 16 views
6

Na przykład:Jak analizować zagnieżdżony obiekt/tablicę przy użyciu parsera jsoncpp w 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; 
     } 
    } 

przykład pliku 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] 
      } 
      ] 
} 

W tablicy pozycji widzimy inny układ (zagnieżdżonych) nazwie items2 .

mogą wystąpić następujące dla tablic:

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

Dla obiektów jest podobny. W każdym polu może oczywiście być wiele zagnieżdżonych obiektów/tablic. Jak zapisać dane w zmiennych C++?

+0

Nie jest dla mnie jasne, o co naprawdę prosisz. Widzę 3 pytania. Jak przetworzyć dane 'tablica' i dane' obiektu' w bibliotece 'jsoncpp'? Jak dostosować się do różnych konwencji przechowywania danych? Jak obsługiwać sprawy ogólne/zagnieżdżone? – luk32

+0

Nie jest jasne, czy chcesz przeanalizować predefiniowaną klasę C++, czy też chcesz przeanalizować dowolne dane JSON. W tym drugim przypadku nie ma sensu przekształcanie 'JSON :: Value' w inne formaty; po prostu użyj 'JSON :: Value' bezpośrednio. –

Odpowiedz

0

Będziesz chciał, aby główna funkcja parsowania była rekurencyjna. Następnie użyj klas STL, takich jak wektor, które pozwalają dynamicznie przydzielać więcej miejsca na dane.

Powiązane problemy