0

次のような単純なjsonファイルがあります。

{
             "id": 1,
             "url": "someUrl",
            "question": "What is the name?",
        "answer": [
            {
                "a": {
                    "text": "Back to the A",
                    "status": 0
                }
            }
}

次のコードを使用して、これらすべてのデータを解析して xcode プロジェクトに入れることができました。

NSData* myData = [NSData dataWithContentsOfURL:
                        [NSURL URLWithString:@"http://myWebsite.net/json/myValidjson.json"]
                        ];
    NSDictionary* json = nil;
    if (myData) {
        json = [NSJSONSerialization
                JSONObjectWithData:myData
                options:kNilOptions
                error:nil];
    }

この後、次のコードの値:

json[@"movies"][0][@"answer"][0][@"a"][@"status"]; 

は 0 で、ここまでは元気です。

今、次のように比較しようとしたとき:

if (json[@"movies"][0][@"answer"][0][@"a"][@"status"] == 0) {
    NSLog("Value is Equal.");
}

json[@"movies"][0][@"answer"][0][@"a"][@"status"] の値は 0 ですが、実際には ID整数ではありません。したがって、比較は false を出力します。

この結果が得られるのはなぜですか? その「IF」条件を真にするための解決策は何ですか?

4

1 に答える 1

3

NSDictionaryオブジェクトはとにのみ格納できるNSArrayため、そのような整数を直接入れたり取得したりすることはできません。それがNSNumberクラスが発明された理由です。JSON を解析するとき、パーサーは数値に遭遇するたびにNSNumber、適切な値で をインスタンス化します。整数が必要な場合は、次のように実行できます。

if ([json[@"movies"][0][@"answer"][0][@"a"][@"status"] intValue] == 0)

または、オブジェクトを直接比較します。

if ([json[@"movies"][0][@"answer"][0][@"a"][@"status"] isEqual:@0])
于 2012-12-29T21:44:26.477 に答える