-2

この JSON の解析で小さな問題が発生しました

    {
    "@attributes": {
        "date": "23-12-2012"
    },

    "data": [

        {
        "ft_link": "google",
        "title": "CEO"

        },
        {
        "ft_link": "Yahoo",
        "title": "CEO"
        }
     ]
}

すべての「タイトル」アイテムを取得しようとしました。

NSError *jsonError = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&jsonError];


NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
NSLog(@"%@", [jsonDictionary objectForKey:@"data"]);

これにより、JSON 全体がログに記録されます。しかし今、私はすべての「タイトル」アイテムを解析したいと思っています。だから私は試しました:

NSLog(@"%@", [jsonDictionary objectForKey:@"data"] objectForKey:@"title"]);

しかし、その後クラッシュします。どうすれば正しく解析できますか?

クラッシュ:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x91583c0'
4

3 に答える 3

2

前述のようobjectForKeyに、NSArray では機能しません。ただし、NSArray は を実装valueForKeyしており、それを使用して必要なものを取得できます。

[jsonDictionary objectForKey:@"data"] valueForKey:@"title"]

これは、タイトルを含む文字列の配列を返します。

objectForKey呼び出しは配列valueForKeyを返しますが、配列を呼び出すと、オブジェクトごとに呼び出すことでオブジェクトの配列が返されvalueForKeyます。

于 2012-12-23T15:23:48.260 に答える
1

データは(辞書の)配列であるため、サポートされていませんobjectForKey:。クラッシュするエラーは、そのようなことを示唆している可能性があります。また、作業を行う前に、json の解析によって返されたエラーを常に確認する必要があります。

于 2012-12-23T15:02:37.557 に答える
0

これが有効な JSON かどうかはわかりません。

ただし、要件に従って、「タイトル」のすべての値を取得する必要があります。そして、複数の「タイトル」があることがわかります。そのため、それを分割してからNSArray、ネストされた by にアクセスするNSDictinary必要がありますobjectForKey:@"title"

于 2012-12-23T15:02:19.010 に答える