2015-12-14 74 views
0
rapidjson::Document d; 
    d.Parse<0>(chatevent.chat.c_str()); 

    if(d.HasMember("kelimeler")) 
    { 
     rapidjson::Value::MemberIterator M; 
     const char *key,*value; 

     for (M=d.MemberBegin(); M!=d.MemberEnd(); M++) 
     { 
      key = M->name.GetString(); 
      value = M->value.GetString(); 

      if (key!=NULL && value!=NULL) 
      { 
       log("key: %s, value: %s", key,value); 
      } 
     } 
    } 

這是我用來處理cocos2d-x中的json數據的代碼。而這裏是json:rapidjson cocos2d-x解析

{ 
    "kelimeler": [{ 
     "harfsayisi": 10, 
     "kelime": "bibnştvdaf", 
     "harfler": ["t", "s", "ç", "p", "b", "c", "h", "n", "c", "c", "n", "b", "t", "v", "ş", "v", "a", "c", "v", "p", "d", "ğ", "s", "k", "i", "ç", "f", "v", "b", "p", "a", "ü", "d", "ü", "e"] 
    }] 
} 

那麼如何使用代碼來處理它呢?我根本無法得到「kelimeler」分支。提前致謝。

回答

0

沒有你在哪裏代碼它實際上是否得到「kelimeler」數組。請參閱rapidjson教程http://rapidjson.org/md_doc_tutorial.html#ValueDocument

if(d.HasMember("kelimeler")) 
{ 
    const Value& k = d["kelimeler"]; // you are missing this 
    assert(k.IsArray()); 
    for (SizeType i = 0; i < k.Size(); i++) 
    { 
     ... 
    } 
} 
+0

不幸的是它不適用於我。我之前嘗試過。 ^ – gokturk

+0

它給你帶來錯誤或錯誤的輸出。指定發生錯誤時的運行時間還是編譯時間錯誤 –

1

需要記住注意名稱空間衝突。理想情況下,編譯器會警告模糊性。在你的情況下,你需要指定你想從rapidjson類而不是cocos2d。

更新喬希的例子。

rapidjson::Document d; 
d.Parse<0>(chatevent.chat.c_str()); 
if(d.HasMember("kelimeler")) 
{ 
    const rapidjson::Value& k = d["kelimeler"]; // you are missing this 
    assert(k.IsArray()); 
    if(k.HasMember("harfler")) 
    { 
     const rapidjson::Value& h = k["harfler"]; 
     for (rapidjson::SizeType i = 0; i < h.Size(); i++) 
     { 
      log("value: %s", h[i].GetString()); 
     } 
    } 
}