我想反序列化我从IOS中运行的Web服务收到的简单JSON。
@"[{\"NickName\":\"James Roeiter3\",\"TempId\":\"634783760669935686\",\"LDAP\":\"XUserName15\",\"SecToken\":null},{\"NickName\":\"James Roeiter2\",\"TempId\":\"634783760654574807\",\"LDAP\":\"XUserName16\",\"SecToken\":null}]"
之前我做了很多次, 我尝试使用NSJsonSerializer并使用STIG进行反序列化:
NSArray* array1= (NSArray*)[jsonString JSONValue];
NSArray* array2 = (NSArray*)[NSJSONSerialization JSONObjectWithData:jsonString options: NSJSONReadingMutableContainers error:&error];
现在,问题很奇怪,如果我将JSON从调试器粘贴到一个硬编码的字符串并尝试解析它,它可以工作,如果我在运行时收到它,它会失败,STIG说它JSON无法启动用'['。 我试着查看所有寻找null char的字符(我不太确定它是什么),但所有字符在复制/粘贴和运行时字符串之间看起来都是一样的。 我也尝试格式化为UTF8并使用格式播放 - 也失败了。
知道它可以是什么或者如何解决?我真的会在这里找到你的帮助,因为我非常坚持这个假设是一个简单的问题,但是直到我解决这个问题才能取得进展......
编辑: 我收到的确切错误是:
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.}
最重要的是对你们所有人,
詹姆斯
答案 0 :(得分:4)
好的,问题是转义字符和引号字符\“,这就是为什么当它复制并粘贴它作为硬代码时它起作用的原因,因为当硬编码时,编译器只读取引号”字符。 如果有人在将来遇到这个问题,这可能会非常烦人: 问题是服务器url编码了数据(C#服务器端),IOS url decode因其弱点而闻名,而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的开头和结尾删除引号,那么我在“chars”之前删除所有\ chars。
现在这似乎工作顺利,如果你认为我做错了,请纠正我。
希望有一天能帮到某人。
干杯,
詹姆斯