2012-11-30 65 views
1

我已经在网上搜索解决这个问题的方法,但总是返回给我的结果为null。iOS JSON解析返回null

这是我从网上收到的以下字符串。一切似乎都很好。但是,当我要将此字符串转换为数组时,返回的结果为空。

的代码:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
NSLog(@"connectionDidFinishLoading"); 
NSLog(@"Succeeded! Received %d bytes of data",[self.responseData length]); 

// String 
NSString *responseString = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@", responseString); 

NSDictionary *resultsDictionary = [responseString objectFromJSONString]; 
NSLog(@"%@", resultsDictionary); // Returns null 

}

其结果是: [{ “CID”: “382595836”, “名称”:“\ u514d \ u7a0e \ u5e97 \ u4e13 \ u5356 \ u54c1 “},{” CID “:” 382595837" , “名”: “\ u9650 \ u91cf \ u7248 \ u9999 \ u6c34”},{ “CID”: “380837083”, “名”:“\ u5973 \ u58eb \ u7cbe \ u88c5 “},{” CID “:” 380837082" , “名”: “\ u7537 \ u58eb \ u7cbe \ u88c5”},{ “CID”: “61540749”, “名”:“\ u7b80 \ u88c5 \ u5973 \ u7528 \ u9999 \ u6c34 “},{” CID “:” 24213689" , “名”: “\ u7b80 \ u88c5 \ u7537 \ u7528 \ u9999 \ u6c34”},{ “CID”: “25541561”, “名” :“Q \ u9999 \ u5973 \ u58eb”},{“cid”:“25541841”,“name”:“Q \ u9999 \ u7537 \ u58eb”}]

任何人都可以为我提供一种思考方式。

谢谢。

+0

你的JSON数据是一个数组(不是一个对象或字典)因为它以括号开始和结束(而不是大括号)。 – Codo

+0

我很抱歉。编程服务器的人打电话给我,说在角色前面有一些不需要的字符串。这导致了错误。 – user288231

+0

粘贴你的整个JSON ... – Rajneesh071

回答

0

使用下面的代码。该代码将在iOS 5.0及更高版本上运行。

NSArray* list = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions 
          error:&error]; 

我做到了。它对我来说工作得很好。你可以尝试一下逻辑。

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"json"]; 
NSData *myData = [NSData dataWithContentsOfFile:filePath]; 
NSError *error; 
id json = [NSJSONSerialization JSONObjectWithData:myData options:kNilOptions error:&error]; 
NSArray *list = (NSArray *)json; 
+0

它仍然返回(null) – user288231

+1

尝试更新的代码。用数组而不是字典检查它。 –

+0

它仍然为空。 – user288231

-1

objectFromJSONString将返回nil,如果你正在传递的字符串不是有效的JSON。

JSONLint选中此

[{"cid":"382595836","name":"\u514d\u7a0e\u5e97\u4e13\u5356\u54c1"},{"cid":"382595837","name":"\u9650\u91cf\u7248\u9999\u6c34"},{"cid":"380837083","name":"\u5973\u58eb\u7cbe\u88c5"},{"cid":"380837082","name":"\u7537\u58eb\u7cbe\u88c5"},{"cid":"61540749","name":"\u7b80\u88c5\u5973\u7528\u9999\u6c34"},{"cid":"24213689","name":"\u7b80\u88c5\u7537\u7528\u9999\u6c34"},{"cid":"25541561","name":"Q\u9999\u5973\u58eb"},{"cid":"25541841","name":"Q\u9999\u7537\u58eb"}] 2012-11-30 14:29:52.779 com.JSON.Product[1979:c07]

这表明它是一个无效JSON

+0

[{ “CID”: “382595836”, “名称”: “\ u514d \ u7a0e \ u5e97 \ u4e13 \ u5356 \ u54c1”},{ “CID”: “382595837”, “名称”:“\ u9650 \ u91cf \ u7248 \ u9999 \ u6c34 “},{” CID “:” 380837083" , “名”: “\ u5973 \ u58eb \ u7cbe \ u88c5”},{ “CID”: “380837082”, “名”:“\ u7537 \ u58eb \ u7cbe \ u88c5 “},{” CID “:” 61540749" , “名”: “\ u7b80 \ u88c5 \ u5973 \ u7528 \ u9999 \ u6c34”},{ “CID”: “24213689”, “名”: “\ u7b80 \ u88c5 \ u7537 \ u7528 \ u9999 \ u6c34”},{ “CID”: “25541561”, “名”: “Q \ u9999 \ u5973 \ u58eb”},{ “CID”: “25541841”,”名称“:”Q \ u9999 \ u7537 \ u58eb“}] – user288231

+0

只有这部分字符串。另一个是第二行的输出... – user288231

+0

如果删除了最后一个右括号后面的字符,则它是有效的JSON。我不清楚这是问题的原因还是仅仅是将JSON数据从调试器中复制到问题中的人为因素。 – Codo

1

尝试这种

NSMutableData *responseData; //在.H类使用

使用此功能在使用中的.m类

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    NSLog(@"connection did receive data"); 
    [responseData appendData:data]; 
    NSString *responseString = [NSString stringWithUTF8String:[responseData bytes]]; 
    NSLog(@"%@",responseString); 
} 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"Succeeded! Received %d bytes of data", [responseData length]); 
} 
+0

我认为你的问题很难... – Deepesh

+0

问题不在于此。问题是将json转换成json数据。我完美地收到了字符串。但是当我将它转换为json数据时,它返回(null)。 – user288231

+0

检查responseString – Deepesh