4

解析するケースが 2 つありますJSON。最初は次のとおりです。

{
    "post_filter_data": {
        "Items": [
            {
                "ItemID": "50cb4e46b5d30b0002000009",
                "ItemName": "Fruit salad test",
                "ItemPrice": "122.0",
                "ItemDescription": "test test",
                "ItemImageUrl": "http://s3.amazonaws.com/menubis-mms-prototype-dev/menubis/assets/50cb4e64b5d30b0002000013/landing_page.jpg?1355501156"
            },
            {
                "ItemID": "50d0870d910ef2000200000a",
                "ItemName": "test new",
                "ItemPrice": "120.0",
                "ItemDescription": null,
                "ItemImageUrl": "http://s3.amazonaws.com/menubis-mms-prototype-dev/menubis/assets/50d0871a910ef20002000015/Screenshot-2.png?1355843354"
            }
        ]
    }
}

Items はNSArray簡単に解析できますが、オブジェクトが 1 つだけの場合はスルー例外が発生します。2つ目JSONは、Items タグに 1 つのオブジェクトが 1 つある場合です。

{
    "post_filter_data": {
        "Items": {
            "ItemID": "50d1e9cd9cfbd20002000016",
            "ItemName": "test",
            "ItemPrice": "120.0",
            "ItemDescription": "test",
            "ItemImageUrl": "http://s3.amazonaws.com/menubis-mms-prototype-dev/menubis/assets/50d1ea019cfbd20002000022/11949941671787360471rightarrow.svg.med.png?1355934209"
        }
    }
}

そして私のコードはここにあり、そこで私はそれを解析しています:

NSDictionary *dictMenu=[responseDict valueForKey:@"post_filter_data"];
NSArray* subMenuArray=[dictMenu valueForKey:@"Items"];

私がそれをチェックアウトする方法はありvalueForKey:@"Items"ますArrayObject

4

2 に答える 2

11

_recievedData でデータ rx を取得し、オブジェクトのクラスを確認します。

    id object = [NSJSONSerialization
                     JSONObjectWithData:_recievedData
                     options:kNilOptions
                     error:&error];
    if (error)
    {
         NSLog(@"Error in rx data:%@",[error description]);
    }
    if([object isKindOfClass:[NSString class]] == YES)
    {
         NSLog(@"String rx from server");
    }
    else if ([object isKindOfClass:[NSDictionary class]] == YES)
    {
         NSLog(@"Dictionary rx from server");
    }
    else if ([object isKindOfClass:[NSArray class]] == YES)
    {
         NSLog(@"Array rx from server");
    }
于 2012-12-20T09:11:02.223 に答える
8

classはい、次のように使用して確認できます

if ([[dictMenu valueForKey:@"Items"] isKindOfClass:[NSArray class]])
{
    // array inside
}
于 2012-12-20T09:02:29.213 に答える