4

我可以检索 JSON 对象并显示它,但是如何从“lat”和“lng”中获取值以在 Xcode 中使用?

我的代码:

NSString *str=[NSString stringWithFormat:@"https://www.<WEBSITE>];
NSURL *url=[NSURL URLWithString:str];
NSData *data=[NSData dataWithContentsOfURL:url];
NSError *error=nil;

NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData:data
                                                           options:kNilOptions
                                                             error:&error];
NSLog(@"Your JSON Object: %@ Or Error is: %@", dictionary, error);

JSON对象:

(
    {
    response =         {

        lat = "52.517681";
        lng = "-115.113995";

    };
}

)

我似乎无法访问任何数据。我试过了:

NSLog(@"Value : %@",[dictionary objectForKey:@"response"]);

我也尝试了很多变化,比如

NSLog(@"Value : %@",[[dictionary objectForKey:@"response"] objectForKey:@"lat"]);

但它总是以崩溃告终:

-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x15dd8b80

我在调试时注意到“字典”仅包含 1 个对象。如何将我的 JSON 对象转换为具有密钥对的 NSDictionary?这个 JSON 对象的格式是否错误?

4

3 回答 3

5

该特定 JSON 对象是 NSArray,而不是 NSDictionary,这就是它无法识别选择器的原因,并且您没有收到警告,因为 NSJSONSerialization JSONObjectWithData 返回一个 id。

尝试

NSArray *array = [NSJSONSerialization JSONObjectWithData:data
                                                 options:kNilOptions
                                                   error:&error];
NSDictionary *dictionary = array[0];
于 2013-10-14T15:14:37.783 回答
0

返回的 JSON 似乎不是 NSDictionnary 对象,而是 NSArray。像这样更改您的代码:

NSarray *responseArray = [NSJSONSerialization JSONObjectWithData:data
                                                           options:kNilOptions
                                                             error:&error];

responseArray 包含一个字典对象(或许多?),然后您可以像这样访问主题:

For ( NSDictionary *dic in responseArray){
    NSDictionnary *response = [dic objectForKey@"response"];
....
}
于 2013-10-14T15:19:41.490 回答
-3

这是我编写的应用程序的片段......基本上是从响应中获取一个NSData对象,然后使用NSJSONSerialization JSONObjectWithData:Options:Error生成一个NSDictionary

NSError *error = nil;
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error];

//Make sure response came in
if(response != nil){
    NSError *error = nil;
    id data = [NSJSONSerialization JSONObjectWithData:response options:0 error:&error];

    if([data isKindOfClass:[NSDictionary class]]){
        //Create dictionary from all the wonderful things google provides
        NSDictionary *results = data;

        //Search JSON here
        NSArray *cityAndState = [[[[results objectForKey:@"results"] objectAtIndex:0] objectForKey:@"address_components"] valueForKey:@"short_name"];
于 2013-10-14T15:14:04.457 回答