2

次の形式でAPIからJSON情報を取得するAFNetworkingに問題があります。

{
    "result": [
        [
            {
                "user": "test user",
                "password": "test password",
                "company": "test company"
            }
        ]
    ]
}

{[[{}]]}(二重角かっこ)に注意してください。ただし、「結果」の値は1つだけです。

エラーが発生します:

ApiTest[83166:c07] -[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x7136a30
ApiTest[83166:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x7136a30'
*** First throw call stack:
(0x1da6012 0x123de7e 0x1e314bd 0x1d95bbc 0x1d9594e 0x3d60 0x3122 0x16909 0x179953f 0x17ab014 0x179b7d5 0x1d4caf5 0x1d4bf44 0x1d4be1b 0x21397e3 0x2139668 0x18565c 0x2a9d 0x29c5)
libc++abi.dylib: terminate called throwing an exception

ファイルをローカルでセットアップし、角かっこ「{[{}]}」の1つのセットを使用するだけで、JSONデータはAFNetworking/JSONプロジェクトコードによって正常に処理されます。

{
    "results": [
        {
            "user": "test user",
            "password": "test password",
            "company": "test company"
        }
    ]
}

したがって、二重角括弧セットがなくても、次を使用して「結果」を正常に取得できます。

self.results = [jsonObject objectForKey:@"result"];

私のプロジェクトがjavascriptの場合、次のようなものを使用します。

var userId = data.result[0][0].user;

Objective Cを使用してアレイを正しく選択する方法を知っている人はいますか?調査に数日を費やしましたが、行き詰まりました。

前もって感謝します。

4

1 に答える 1

2

問題は、別の配列内に配列を取得しているため、次のことを行う必要があることです。

NSArray *array = [jsonObject objectForKey:@"result"];
if (array.count > 0)
    self.results = [array objectAtIndex:0];
于 2012-12-26T14:16:55.507 に答える