【问题标题】:iOS-error in parsing the dataiOS 解析数据时出错
【发布时间】:2014-01-02 09:43:20
【问题描述】:

在我的应用程序中,我使用 JSON 解析数据

NSString * urlString=[NSString stringWithFormat:@"http://userRequest?userid=bala@gmail.com&latitude=59.34324&longitude=23.359257"];
NSURL * url=[NSURL URLWithString:urlString];
NSMutableURLRequest * request=[NSMutableURLRequest requestWithURL:url];
NSError * error;
NSURLResponse * response;
NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString * outputData=[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"%@",outputData);

SBJsonParser *jsonParser = [SBJsonParser new];
NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:outputData error:nil];
NSLog(@"%@",jsonData);
NSInteger success = [(NSNumber *) [jsonData objectForKey:@"success"] integerValue];  

此代码执行后,在我的日志中打印为

({  
latitude = "0.000000000000000";  
longitude = "0.000000000000000";  
username = sunil;  
},  
{  
latitude = "80.000000000000000";  
longitude = "30.000000000000000";  
username = arun;  
})  

但是在运行时,应用程序崩溃了,因为

'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x910d8d0'

【问题讨论】:

  • 上面的代码很好,错误在你代码的其他地方。请向我们展示您的数组的实例化以及您尝试访问数组中数据的代码,因为您试图在您的 NSMutableArray 上调用一个仅适用于 NSMutableDictionary 的方法
  • 哦,对不起,我会更新的
  • 据我所知,在 json 中使用 ':' 而不是 '='.. 如果我错了请告诉我
  • @achievelimitless,我得到了答案,谢谢你

标签: ios iphone json invalid-argument


【解决方案1】:

我认为您的问题是,jsonParser objectWithString 返回一个包含字典的数组,而不是字典本身。

尝试以下方法:

NSArray *jsonData = (NSArray *) [jsonParser objectWithString:outputData error:nil];

for(NSDictionary *dict in jsonData) {
    NSLog(@"%@",dict);
}

这对你有用吗?

【讨论】:

  • 现在我的字典里有很多坐标,我想把它们画出来,到谷歌地图上,有什么帮助
  • 更新您的问题或提出一个新问题,详细描述您的问题以及您迄今为止所尝试的方法。
【解决方案2】:

您的回复是NSArray,其中包含NSDictionary。所以首先从数组中获取字典然后访问值。还有你的json 看起来不正确。

for (NSDictionary *dict in responseArray) {
    double latitude = [dict[@"latitude"]doubleValue];
    double longitude = [dict[@"latitude"] longitude];
    NSString* name = dict[@"username"];
}

【讨论】:

  • 现在我的字典里有很多坐标,我想把它们画出来,到谷歌地图上,有什么帮助
  • 我知道如何使用谷歌地图和绘制点,我怀疑我不知道从 nsdictionary 检索值
  • 回答你可以看到如何从NSDictionary检索值
  • 你能帮我解决这个问题吗stackoverflow.com/questions/20902732/…
【解决方案3】:

1.首先你得到的是 JSON 格式的 NSArray

JSON以“(”开头表示NSArray

JSON 以“{”开头表示 NSDictionary

这里你得到 NSArray,它有 NSDictionary 的集合,

    {
        latitude = "0.000000000000000";
        longitude = "0.000000000000000";
        username = sunil;  
    },...

2.“成功”键不存在于 JSON..

  • 修复

    NSArray *jsonData = (NSArray *) [jsonParser objectWithString:outputData error:nil];
    
    If([jsonData count]>0){
    
        // Has some data
        // Iterate NSDictionary and get data here
    }
    else{
    
        // No Data
    }
    

【讨论】:

【解决方案4】:

在某些地方,您使用某个对象键从 nsarray 获取数据。该键对从数组中获取数据无效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多