IOS JSON 反序列化失败-蒂格/NSJSONSerializer

标签: json ios
发布时间: 2014/2/12 2:47:17
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想我从我在 IOS 中运行的 web 服务接收简单 JSON 反序列化。

@"[{\"NickName\":\"James Roeiter3\",\"TempId\":\"634783760669935686\",\"LDAP\":\"XUserName15\",\"SecToken\":null},{\"NickName\":\"James Roeiter2\",\"TempId\":\"634783760654574807\",\"LDAP\":\"XUserName16\",\"SecToken\":null}]" 

我做过许多次之前,我尝试使用 NSJsonSerializer 和还使用斯蒂格都反序列化:

NSArray* array1= (NSArray*)[jsonString JSONValue]; 

NSArray* array2 = (NSArray*)[NSJSONSerialization JSONObjectWithData:jsonString   options: NSJSONReadingMutableContainers error:&error];

现在的问题是很奇怪,如果我复制粘贴调试器中的硬编码的字符串并尝试解析它成 JSON,它工作,如果我收到它在运行时,它将失败,斯蒂格说它 JSON 无法启动与 ' ['。我试过从寻找空 char (这我不太确定它是什么) 的所有字符,但所有字符看都起来一样的复制粘贴和运行时字符串之间。我也尝试过格式设置为 UTF8 和戏剧有点与格式 — 也失败。

不知道什么可以它会或如何解决??真的,我可以将你的帮助,我很困这假设将简单的问题,但不能取得进展,直到解决此问题我的 appricate......

编辑: 确切的错误我收到这是:

2012-07-21 23:59:31.376 Whisper.Client.IOS[1058:fe03] Error : Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (No string key for value in object around character 1.) UserInfo=0xc9632e0 {NSDebugDescription=No string key for value in object around character 1.}

最好的问候给你所有,

詹姆斯 ·

解决方法 1:

好的问题是转义字符和引号字符 \",这就是为什么在复制和粘贴它作为硬编码时它工作因为当进行硬编码,编译器读取仅报价"字符。这可能是非常令人讨厌,如果有人在未来获取到这一问题: 问题是服务器 url 编码 (C# 服务器端) 的数据,IOS url 解码而闻名的弱点和 apprenlty 并不会删除 \"从字符串的字符。

这是我目前的 IOS 解码代码:

json = [json stringByReplacingOccurrencesOfString:@"+" withString:@" "];
json = [json stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
json = [json stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:@""];
int lastChar = [json length]-1;
json = [json stringByReplacingCharactersInRange:NSMakeRange(lastChar,1) withString:@""];
json = [json stringByReplacingOccurrencesOfString:@"\\" withString:@""];
return  json;

如果第一次删除引号开头和结尾的 json,然后删除所有 \ 字符之前"字符。

这似乎现在顺利工作,如果你认为我做错了什么请纠正我。

希望,总有一天会帮助别人。

欢呼声中,

詹姆斯 ·

官方微信
官方QQ群
31647020