0

SBJson を使用して Json を解析しようとして問題が発生しました。いくつかの調査を行いましたが、役立つ情報が見つかりません...

その方法についてブログをたどりましたが、それでもエラーが発生します:「__NSArrayM objectForKey:」

だから、これは私が解析しようとしているJsonです:

{
"result": [
    {
        "authors": [
            "Eric Ries"
        ],
        "bc": 9780671607,
        "title": "Yeah",
        "urlImage": "www.yeah.hey",
        "description": "Hey..."
    }
    ]
}

これは私が使用しているコードです:

SBJsonParser *json;
NSDictionary *jsonResults;
NSError *jsonError;

json = [ SBJsonParser new ];

// Get result in a NSDictionary
jsonResults = (NSDictionary*) [ json objectWithString:output error:&jsonError ];

// Check if there is an error
if (jsonResults == nil) {
    NSLog(@"Erreur lors de la lecture du code JSON (%@).", [ jsonError localizedDescription ]);  
} else {
    NSDictionary *book = (NSDictionary *)[ jsonResults objectForKey:@"result"];
    NSArray *items = (NSArray *) [book objectForKey:@"title"];
}

エラー :

-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x7a2d390
2012-11-19 20:32:36.336 FMS[500:11f03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x7a2d390'
*** First throw call stack:
(0x2245012 0x16a3e7e 0x22d04bd 0x2234bbc 0x223494e 0x8c6a 0x36093 0xb39e83 0x2204376 0x2203e06 0x21eba82 0x21eaf44 0x21eae1b 0x219f7e3 0x219f668 0x8365c 0x2d6d 0x2c95)
libc++abi.dylib: terminate called throwing an exception
Current language:  auto; currently objective-c

そして、objectForKey の代わりに valueForKey を使用することによって

[book valueForKey:@"title"];

私はこれを取得しています:

(
    "Yeah"
)

ただの代わりに

そして、少なくともええを取得するために ( "Yeah" ) を再度解析したくありません...

4

1 に答える 1

5

「book」は辞書ではなく配列であるため、このエラーが発生します。すべての結果がこのように見える場合、それは「本」に外部オブジェクトが 1 つしかないことを意味します。book を定義する行を次のように変更できます。

NSDictionary *book = [[ jsonResults objectForKey:@"result"] lastObject];
于 2012-11-19T19:43:59.280 に答える