- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想反序列化从在 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 无法启动和 '[' 。我尝试遍历所有字符以查找空字符(我不太确定它是什么)但是所有字符在复制/粘贴和运行时字符串之间看起来都一样。我还尝试将格式设置为 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.}
祝大家好运,
詹姆斯
最佳答案
好的,问题出在转义字符和引号字符\",这就是为什么将其复制并粘贴为硬代码时它起作用的原因,因为在硬编码时,编译器只读取引号 "字符。如果将来有人遇到这个问题,这可能会非常烦人:问题是服务器 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 开头和结尾的引号,然后删除 "字符之前的所有\字符。
现在看来一切顺利,如果您认为我做错了什么请指正。
希望有一天能对某人有所帮助。
干杯,
詹姆斯
关于IOS JSON 反序列化失败 - STIG/NSJSONSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594617/
我正在使用NSJSONSerialization将json字符串转换为NSDictionaray JSON字符串是 {"bid":88.667,"ask":88.704} 在NSJSONSeriali
我正在使用 iOS 5 新功能来解析 JSON,但我不知道为什么我没有得到任何键值对。 “aStr”(数据的字符串表示形式)将正确的 JSON 放在输出窗口上,但我在“dicData”中什么也没有得到
我正在尝试将 JSON 文件解析为 NSArray,对于正数来说一切都很好。然而,该 JSON 文件中的所有负整数都会生成高数字,例如“[11] __NSCFNumber * (long)720575
我有一个NSJSONSerialization JSONObjectWithData,我在其中传递了NSData对象。结果,我得到一个NSString而不是NSDictionary。我的完整行是: N
在以下用于解析JSON的代码中,当对象碰巧不是NSArray或NSDictionary时,将使用NSJSONReadingAllowFragments。 下面的代码可以正常工作并输出32。但是如果将3
好的,我正在使用以下代码获取 JSON 文件 - (void)dataRequest { NSURL *dataURL = [NSURL URLWithString:@"link to JSO
我有一些看起来像这样的代码: NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
我在尝试从 URL 解析 JSON 时遇到错误。 代码如下: override func viewDidLoad() { super.viewDidLoad()
我在 AppDelegate.m 中有这段代码: NSError *error; NSString *filePath = [[NSBundle mainBundle] pathFor
这个问题在这里已经有了答案: NSJSONSerialization and Emoji (2 个答案) 关闭 6 年前。
我正在使用 JSON 来填充带有标记的 mapView。 在方法 -(void)connectionDidFinishLoading:(NSURLConnection *)connection 编译器
我在使用 NSJSONSerialization 创建 NSString 的 NSDictionary 表示(JSON 字符串)时遇到了一些问题。我以前使用过 JSONKit,但由于它在 iOS9 中
请原谅我可能犯的错误,我第一次问这个问题。 阅读本网站上的几个主题后,like this one首先我会尝试使用 describe 方法,但它仍然不起作用@all :-( 我的 .json 文件看起来
我的 iPad 应用程序需要解析一个 10 MB 的 JSON 文件并将其内容保存在 Core Data 中。 考虑到大文件大小和内存使用,您会推荐使用 NSJSONSerialization 还是您
我有一个看起来像这样的字符串:(它派生自一个格式略有错误的解码数据对象,我通过控制台修复并验证了这个输出) {"home":{"breakfast":{"protein":"55","carbs":"
我已经在几个项目中使用过它... [NSJSONSerialization dataWithJSONObject:someObject options:0 error:nil] 但我不知道如何指定无选
我有一本字典,当我登录时它会显示... { Date = "2013-04-30 17:17:18 +0000"; Description = Kb; EventID = "9
在我的 iOS 应用程序中,我在后台线程中做一些工作(使用 performSelectorInBackground)。在此线程中,我使用 NSJSONSerialization 及其类方法来解析 JS
我正在使用 NSJSONSerializer 来解析一些 json 格式的数据。数据包含一些“ü”和“ö”等。我发现它确实返回 nil,如果没有事先使用 NSASCIIStringEncoding 将
我在使用 NSJSONSerialization 从 Met Office Datapoint API 读取 JSON 时遇到问题。 出现以下错误 Error Domain=NSCocoaErrorD
我是一名优秀的程序员,十分优秀!