Json 到 iOS 编码错误
Posted
技术标签:
【中文标题】Json 到 iOS 编码错误【英文标题】:Json to iOS Encoding Error 【发布时间】:2014-11-06 01:50:52 【问题描述】:问题:我无法将 JSON 文件中的数据正确解析为 NSArray。 UTF 编码未按预期工作。
我的 JSON 看起来像:
[
"Name":"Marcos","Address":"1234 Brasil Av. São Paulo - SP","Latitude":"-23.000","Longitude":"-46.70","Name":"Mario","Address":"1000 Washignton Luiz Av. Itú SP","Latitude":"-20.0000","Longitude":"-46.000"
]
我的 Objective-C 代码是:
NSError *error = nil;
NSURL *jsonUrl = [[NSURL alloc]initWithString:
@"http://marcosdegni.com.br/teste/webservice_teste.php"];
NSString *jsonString = [NSString stringWithContentsOfURL:jsonUrl
encoding:NSUTF8StringEncoding error:&error];
NSLog(@"jsonString: %@ , Error:%@:" ,jsonString, error); //(1)
if (!error)
NSError *error2 = nil;
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSArray * jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error2];
NSLog(@"\n\nArray: %@" \nError:$@, jsonArray, error2); //(2)
//(*1*) This log show the content's as they are expected: note the characters ã and ú on the address fields.
//(*2*) The logs from the array and the dictionary show this charters as it's UNIX codes:\U00e and \U00fa respectively.
【问题讨论】:
为什么要对相同的数据进行两次解码,一次是数组,一次是字典?什么不起作用?error
(你错误地输入nil
)报告了什么(在你纠正了那个错误之后)?
这是我获取数据的两次尝试。没有一个工作。为了清楚起见,我排除了 dic 。 nil --> 错误被替换。 Tks
所以,换句话说,没有错。扩展的 UNICODE 数据按预期显示在 NSLog 中。
不,当我记录 jsonArray 时,它仍然显示 \U00e3 而不是 ã 和 \U00fa 而不是 ú...
是的!所以是正确的。 (如果您不相信我,请在标签中显示数据。)
【参考方案1】:
你可以试试这个。你得到的id json
将是一个NSArray,你可以从那里使用它。
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSArray * array = json;
for (NSDictionary *dict in array)
NSString *string = [dict objectForKey:@"Address"];
NSLog(@"%@",string);
来自here,如果我获得键的值并记录它,而不是直接记录 NSArray,我会得到正确的结果。
【讨论】:
这不会在receivedString
上产生一个未定义的符号消息吗?
现在你只是在做和 OP 一样的事情。
是的,它会的,这是我为 JSON 库测试的字符串。我已经删除了,谢谢指出。
这个答案与 OP 的代码有何不同?您所做的只是将变量类型从NSArray
更改为id
。
你的方法也有效。不知何故,如果我记录所有 Dic 它不起作用,但是通过将对象记录在 dic 中它可以。 Tks以上是关于Json 到 iOS 编码错误的主要内容,如果未能解决你的问题,请参考以下文章
核心数据 NSManagedObject 到 JSON 编码不起作用
如何在 iOS 中解析 mapquest 地理编码 JSON
编码 4 字节 UTF-8 字符 ????从 Rails 到 JSON 产生无效字符
PHP json 编码 - 格式错误的 UTF-8 字符,可能编码不正确