2012-07-21 112 views
2

我想反序列化从IOS中运行的Web服务接收到的简单JSON。IOS JSON反序列化失败 - STIG/NSJSONSerializer

@"[{\"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不能以'['开头。 我尝试了所有查找空字符的字符(我不太确定它是什么),但所有字符在复制/粘贴和运行时字符串之间看起来都是一样的。 我也尝试格式化为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.} 

最好的问候给你所有的,

詹姆斯

回答

4

好了,问题是转义字符和引号字符\”,这是为什么复制并粘贴它作为硬编码的时候,它的工作,因为当硬编码编译器读取引用“字符。 如果有人在将来遇到这个问题,这可能是非常烦人的: 问题是服务器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结束的报价,然后我删除所有的\字符之前的“字符。

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

希望有一天能帮助别人。

干杯,

詹姆斯