2

从 Json 字符串(或文件)中,我想在事先不知道键的情况下收集键/值对。假设我有这个 Json:

{ "a":"1","b":"2","c":"3" }

我想收集所有关键字符串 "a" 、 "b" 、 "c" 、 "d" 及其各自的值。顺便说一句:我在 Cocos2dX 3.3 中使用 rapidjson 集成。任何想法?

我现在正在使用的是:

rapidjson::Document JSON; 

//..... collecting the JSON .... then

for (rapidjson::Value::MemberIterator M=JSON.MemberonBegin(); M!=JSON.MemberonEnd(); M++)
{
    //..... I have access to M->name and M->value here
    //..... but I don't know how to convert them to std::string or const char*
}   

但我坚持这一点。

4

1 回答 1

5

我刚刚发现rapidjson::Value::MemberIterator 里面有函数。所以这是一个从 Json 文档中枚举密钥/对的示例。此示例仅记录根密钥。您将需要额外的工作来检索子键

const char *jsonbuf = "{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"}";

rapidjson::Document                 JSON;
rapidjson::Value::MemberIterator    M;
const char                          *key,*value;

JSON.Parse<0>(jsonbuf);

if (JSON.HasParseError())
{
    CCLOG("Json has errors!!!");
    return;
}

for (M=JSON.MemberonBegin(); M!=JSON.MemberonEnd(); M++)
{
    key   = M->name.GetString();
    value = M->value.GetString();

    if (key!=NULL && value!=NULL)
    {
        CCLOG("%s = %s", key,value);
    }
}
于 2015-01-09T14:50:11.700 回答