Ios 将JSON字符串转换为NSDictionary时,并非所有键都有效
我使用以下代码将JSON字符串文字转换为包含每个项的NSDictionary的数组:Ios 将JSON字符串转换为NSDictionary时,并非所有键都有效,ios,objective-c,json,nsdictionary,nsdata,Ios,Objective C,Json,Nsdictionary,Nsdata,我使用以下代码将JSON字符串文字转换为包含每个项的NSDictionary的数组: NSString* json = @"[{\"name\":\"Item 1\",\"id\":\"999\",\"lang\":\"en\",\"type\":\"A\",\"version\":15}]"; NSData* data = [json dataUsingEncoding:NSUTF8StringEncoding]; NSArray* values = [NSJSONSerialization
NSString* json = @"[{\"name\":\"Item 1\",\"id\":\"999\",\"lang\":\"en\",\"type\":\"A\",\"version\":15}]";
NSData* data = [json dataUsingEncoding:NSUTF8StringEncoding];
NSArray* values = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
从我的测试设备中删除应用程序后,该应用程序在尝试访问时在for
循环values[i][@“name”]
中开始崩溃。在inspector中查看值时,我看到以下内容:
values = (NSArray *) @"1 object"
[0] = (__NSDictionaryM *) 5 key/value pairs
[0] = (no summary) : @"Item 1"
[1] = @"id" : @"999"
[2] = @"type" : @"A"
[3] = (no summary) : (long)15
[4] = @"lang" : (no summary)
进一步展开时,应该是名称
和版本
的键都显示为类型(\uu NSCFConstantString*)
这是在从设备中删除应用程序之前工作的,并且没有对代码的这一部分进行任何更改
关于是什么导致了这种情况,或者有没有更好的方法将json字符串转换成字典
更新:我将“名称”和“版本”改为“游戏”和“gersion”,效果非常好。在尝试调试了几个小时后,我的主管和我决定重新启动正在开发的MacBook。这解决了运行时问题,我问题中的代码再次按预期工作
我们仍然不确定是什么导致设备进入这种状态,因为多次运行“Clean Build Folder”,关闭并重新启动XCode,重新启动iPad对我们没有任何帮助
我考虑过删除这个问题,但由于我们不知道是什么原因导致了这个问题,我想将来可能会有其他人遇到这个问题,这个答案可能会对他们有所帮助。如果有人能提供一些关于可能导致这种情况的见解,我很乐意接受你的回答。以什么方式工作?ArrYs是通过索引而不是键访问的,所以您的代码总是错误的。对不起,这是一个字典数组。我将编辑我的问题。为什么要使用JSON字符串文字而不是字典文字的Objective-C数组文字?无论如何,记录数组,或者在调试器中执行po value
@Ken Thomases这是来自服务器的数据,我只需要解析它。为了进行测试,我记录了JSON并复制了字符串,因此我不需要从服务器上连续获取它。1)Xcode调试器的变量检查器非常不可靠。在控制台窗口中使用NSLog或键入po
——永远不要相信调试器的显示。2) 如果数据真的像那样乱七八糟(而且它不是调试器工件),那么你就有一个坏的存储错误(僵尸)。你有没有在Xcode 12.1中再次遇到这种情况?在x/y绘图场景中,我得到的是一个双倍值的“(无摘要)”,而不是另一个。