2

私がやろうとしているのは、JSON フィードを取得して、結果をループすることです。ただし、辞書からオブジェクトを取得すると、配列ではなく文字列を取得し続けます。私が間違っていることについてのアイデアはありますか?

JSONは次のとおりです。

[
  {
    "_id": "4f6d9a7c1d0b4900010007ee",
    "geo_triggers": [
      {
        "_id": "4fc3e5fdc7234e0001000002",
        "location": [1,1],
        "longitude": "1",
        "latitude": "1",
        "radius": 1,
        "location_name": "Test 1"
      },
      {
        "_id": "4fc61f3762f53f0001000043",
        "location": [-71.057673,42.355395],
        "longitude": "-71.057673",
        "latitude": "42.355395",
        "radius": 1000,
        "location_name": "Test2"
      }
    ]
  }
]

目的の C コードは次のとおりです。

const char* className = class_getName([result class]);
NSLog(@"Result is a: %s", className);
NSLog(@"%@", result); //string
NSArray* json = [result objectForKey:@"result"]; //should be an array of dictionaries
NSLog(@"JSON Output: %@", json);
const char* className1 = class_getName([json class]);
NSLog(@"yourObject is a: %s", className1);

出力は次のとおりです。

Result is a: __NSDictionaryI
2012-10-10 17:15:15.165 App[12980:19d03] {
    result = "[{\"_id\":\"4f6d9a7c1d0b4900010007ee\",\"geo_triggers\":[{\"_id\":\"4fc3e5fdc7234e0001000002\",\"location\":[1.0,1.0],\"longitude\":\"1\",\"latitude\":\"1\",\"radius\":1,\"location_name\":\"Test 1\"},{\"_id\":\"4fc61f3762f53f0001000043\",\"location\":[-71.057673,42.355395],\"longitude\":\"-71.057673\",\"latitude\":\"42.355395\",\"radius\":1000,\"location_name\":\"Test2\"}]}]";
}
2012-10-10 17:15:15.166 App[12980:19d03] JSON Output: [{"_id":"4f6d9a7c1d0b4900010007ee","geo_triggers":[{"_id":"4fc3e5fdc7234e0001000002","location":[1.0,1.0],"longitude":"1","latitude":"1","radius":1,"location_name":"Test 1"},{"_id":"4fc61f3762f53f0001000043","location":[-71.057673,42.355395],"longitude":"-71.057673","latitude":"42.355395","radius":1000,"location_name":"Test2"}]}]
2012-10-10 17:15:15.166 App[12980:19d03] yourObject is a: __NSCFString
2012-10-10 17:15:15.166 App[12980:19d03] -[__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0xb331800
4

2 に答える 2

6

変数resultは辞書を指しています。辞書には1つのキーが含まれています。そのキーは@"result"です。そのキーの値は文字列です@"[{\"_id\":\"4f6d9a7c1d0b4900010...

つまり、JSONを実際に逆シリアル化していないということです。resultキーの値を取得して、JSONデシリアライザーで実行する必要があります。

于 2012-10-10T21:32:44.240 に答える
1

最初に結果をデコードする必要があります。上記はJSONなので、これを行うことをお勧めします

  1. まだ持っていない場合は、JSONKit.h をダウンロードしてプロジェクトに含めます。
  2. 次に、次のいずれかを行うことができます

    1. NSString* json = [result JSONString];出力
      ORを見る
    2. id jsonDict = [[JSONDecoder decoder] objectWithData:responseData]; その後、 [jsonDict objectForKey:@"_id"]; を実行できます。///等
于 2012-10-10T22:38:51.120 に答える