iOS NSDictionaryの値がJSONブール値かどうかを判定する

私はこのようなWebサーバーからのJSON応答を持っています:

{"success":true, "token":"123456"}

私はif文でそれを使い、それを "YES"と比較したいと思います。

しかし、これを行うことはできません:

NSDictionary *response = [response JSONValue];//the JSON value from webservice response, converted to NSDictionary

if ([response objectForKey:@"success"]){}//does not work
if ([response objectForKey:@"success"] == YES){}//does not work
if ([[response objectForKey:@"success"] integerValue] == YES) {}//does not work...erroneous probably

これを回避するにはどうしたらいいですか?ブール値での型キャストも警告を生成する

26
質問はsbjsonとタグ付けされました。私はiosライブラリSBJSONを使用しています。 stig.github.com/json-framework
追加された 著者 yretuta,
私は、構文解析を行うコードを強調表示するのを忘れて、ごめんなさい
追加された 著者 yretuta,
どのようにJSONレスポンスを解析していますか?
追加された 著者 tarmes,

2 答え

[response objectForKey:@ "success"] は動作しないので、 [response valueForKey:@ "success"] を試してみるとどうなりますか?

私はそれがNSNumberを返すと思うし、次のようなことをすることができます:

NSNumber * isSuccessNumber = (NSNumber *)[response objectForKey: @"success"];
if([isSuccessNumber boolValue] == YES)
{
   //this is the YES case
} else {
   //we end up here in the NO case **OR** if isSuccessNumber is nil
}

また、 NSLog(@ "レスポンス辞書は%@"、レスポンス); はあなたのコンソールのようですか?使用しているJSONライブラリが表示されます。 objectForKey のNSNumberタイプを返します。私はあなたが有効なNSDictionaryを持っていない可能性があります。

これは機能します。ありがとう:)
追加された 著者 yretuta,
この解決策は効果的ではなく、長いものです。短い答えはif([response objectForKey:@ "success"] boolValue])
追加された 著者 hkaraoglu,
私のために働いた!
追加された 著者 Lasse Bunk,
単純なキャストを行う代わりに実際に型をテストしたり、このコードをtry/catchブロックに置いたりすることができます。それ以外の場合、JSONが変更された場合、誤って boolValue を "Y"、 "y"、 "T"、 "t"に対して YES 、または数字1-9)、または例外をスローするコレクションオブジェクトです。
追加された 著者 Aaron Brager,
NSLog の最初の引数の前に @
追加された 著者 Koen.,

これに対するNSNumberへの変換を必要としない別のアプローチは以下のようなものです:

if ([response objectForKey:@"success"])
{
    if ([[response objectForKey:@"success"] boolValue])
        NSLog(@"value is true");
}
11
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript