0

webapi からの jsonresult を解析しようとすると、この問題が発生します。次のようなjson結果が返される場合はいつでも注意してください。

[{"Id":0, "Name":Wombat, "Category":Animal}, 
{"Id":1, "Name":Trident, "Category":Object}]

このコードはその結果に対して機能します。

NSArray *jsonresult = [WCFServiceRequest processWebApiGETRequestWithURL:url];

    if(jsonresult){
        for(id item in jsonresult){

            NSLog(@"item is %@", item);


            if([item isKindOfClass:[NSDictionary class]]){
                object.Id = [item objectForKey:@"Id"];
                object.name = [item objectForKey:@"Name"];
                object.category = [item objectForKey:@"Category"];

            }
        }
    }

しかし、次のような none リストの結果が返されると、次のようになります。

{"Id":1, "Name":Trident, "Category":Object}

それは通過しません

if([item isKindOfClass:[NSDictionary class]]){

ここで、それを取り出して、プロパティの割り当てに直行するとします。jsonarray から返される "item" 変数がキーです (例: Id、Name など)。これを適切に反復処理し、キーを使用して割り当てる方法がわかりません。インデックスを使用しているようですか?別の辞書を作成しますか?

4

1 に答える 1

1

DataType単純TypeCastにオブジェクトへの結果を認識していない場合、その解決策を得るのは非常に簡単ですid(A Generic DataType)

json レスポンスを次の場所に保存しますid

id jsonresult = [WCFServiceRequest processWebApiGETRequestWithURL:url];

// Check whether Response is An Array of Dictionary
if([jsonresult isKindOfClass:[NSArray class]])
{
    NSLog(@"it has multiple Dictionary so iterate through list");
    if(jsonresult){
        for(id item in jsonresult){
            NSLog(@"item is %@", item);                                
            if([item isKindOfClass:[NSDictionary class]]){
                object.Id = jsonresult[@"Id"];
                object.name = jsonresult[@"Name"];
                object.category = jsonresult[@"Category"];                    
            }
        }
    }
}
// Its Dictionary
else if([jsonresult isKindOfClass:[NSDictionary class]])
{
    NSLog(@"It has only one dictionary so simply read it");
    object.Id = jsonresult[@"Id"];
    object.name = jsonresult[@"Name"];
    object.category = jsonresult[@"Category"];
}

あなたの応答はDictionary、Result に 1 つのレコードしかない場合であり、1 つ以上のレコードがある場合は になりますArray

于 2013-04-26T06:54:29.717 に答える