2017-07-21 7 views
0

内の各オブジェクトのすべてのキーと値のペアは、ここに私のJSONオブジェクトです:読む配列

{ 
    "resources":[ 
     { 
      "Foo":0, 
      "Bar":"", 
      "Fiz":1 
     }, 
     { 
      "Foo":2, 
      "Bar":"", 
      "Fiz":3 
     } 
    ] 
} 

上記のJSON配列resourcesが正しくarrayとして検出されます。配列の各オブジェクトを繰り返し処理し、mapkey:valueのペアを追加します。

オブジェクトの量(ここでは2)を正しく検出します。 しかし、オブジェクトメンバーを反復処理する方法は?配列の各要素はオブジェクトではないという主張があります。私はなぜなのか理解していない!あなたはstringとしてすべての値を扱っているが、あなたのJSONにInt型の値を持つキーがある

if (jsonvalue->IsArray()){ // that jsonvalue is my "resources" array 
    for (rapidjson::SizeType i = 0; i < jsonvalue->Size(); i++){ 
     const rapidjson::Value& c = jsonvalue[i]; 
     // Is no object! assertion triggers in next call. 
     for (rapidjson::Value::ConstMemberIterator iter = c.MemberBegin(); iter != c.MemberEnd(); ++iter){ 
      printf("%s\t", iter->name.GetString()); 
      printf("%s\t", iter->value.GetString()); 
     } 
    } 
} 

答えて

0

は、ここに私のコードです。したがって、印刷する前に各valueの種類を最初に確認する必要があります。

printf("%s\t", iter->name.GetString()); 

if (iter->value.IsInt()) 
{ 
    printf("%d\t", iter->value.GetInt()); 
} 
else if (iter->value.IsString()) 
{ 
    printf("%s\t", iter->value.GetString()); 
} 

あなたは11回の反復のためのforループの範囲ベースのC++を使用していない理由を私は疑問に思う:

は、ここでの例です。 RapidJSONはこれをサポートしています。 Exampleを参照してください。

あなたのコードは読みやすくコンパクトになります。

関連する問題