0

これをすると言って、

NSString *teste = yourData[@"title"];

"title"json に が完全になくても問題ありません。取得するだけですnull。これを行う場合:

NSString *teste = yourData[@"location"][@"city"];

"city"json ネストにない場合は問題ありません。"location"セクション全体が存在しない場合でも、問題ありません

でも!このような json をよく見かけますが、" largeImage = "<null>"; "

その場合、上記のコードを使用しているとアプリがクラッシュします。

実際には、これを行う必要があります。

NSString *imageUrl = nil;
if ([yourResults[thisRow][@"largeImage"] isKindOfClass:[NSDictionary class]])
    imageUrl = yourResults[thisRow][@"largeImage"][@"URL"];

私の質問は本当に:

この問題をカバーするために、おそらくリテラル構文をオーバーライドする (つまり、基になるメッセージをオーバーライドする??) 巧妙な方法はありますか?

したがって、基本的に、この概念[@"blah"]は基本的に、操作を試みる前に、実際に手元にある辞書であることを最初に確認するようにしてください。

残念なことに、この素​​晴らしい構文を実際に使用することはできません。

yourData[@"location"][@"city"]

実際には、私が概説した問題のために。

PSこの質問に関する以前の混乱について申し訳ありません.Paramagによって修正されました. 以下 - 良いパラマグ。

4

3 に答える 3

1

個人的には、NSNull の代わりに null を返す JSON カテゴリを使用するので、コードは次のようになります。

[[json objectForKeyNotNull:@"Key"] objectForKeyNotNull:@"Other"]

コードを短くしたいので、次のように使用できる NSDictionary でカテゴリを作成すると思います。

[json objectForPath:@"Key.Value"]

これにより、パスがキーに展開されます。

それがそれをやっているように見えるいくつかの素晴らしい要点があります:

https://gist.github.com/Yulong/229a62c1188c3c024247#file-nsdictionary-beeextension-m-L68

于 2014-08-13T10:32:41.283 に答える
0

これはスキーマの問題だと思います。nullJSON の辞書と JSON の辞書 (「オブジェクト」と呼ばれる) は、異なる種類のものです。あなたのキーが時々辞書の値を持つことができるという事実は、nullあなたたちが厳密なスキーマに従っていないように私には思えます。

優れた設計では、キーが存在しないか、存在する場合、その値はディクショナリであることが保証されます。このような場合NSString *teste = yourData[@"location"][@"city"];、キーの「場所」が存在しない場合、その値はnilObjective-C にあり、その後のアクセスはクラッシュせず、nil.

于 2014-08-15T09:09:45.453 に答える