IOS JSON反序列化失败 - STIG / NSJSONSerializer

时间:2012-07-21 18:00:58

标签: ios xcode json

我想反序列化我从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.}

最重要的是对你们所有人,

詹姆斯

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。

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

希望有一天能帮到某人。

干杯,

詹姆斯