rapidjson cocos2d-x 解析

rapidjson cocos2d-x parsing

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:

{
    "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" 分支。提前致谢。

在您的代码中,它实际上没有获得 "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++) 
    {
         ...
    }
}

需要记住注意命名空间冲突。理想情况下,编译器会警告歧义。在您的情况下,您需要指定您想要来自 rapidjson 的 类 而不是 cocos2d.

正在更新 Josh 的示例。

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