JSONKit反序列化问题
Posted
技术标签:
【中文标题】JSONKit反序列化问题【英文标题】:JSonKit deserialization problem 【发布时间】:2011-08-27 23:23:09 【问题描述】:我有 JSON 作为 NSString:
["bus_number":"1","created_at":"2011-08-15T23:07:52Z","id":1,"model":"Setra","registar_number":"123456","seats":50,"tour_id":1,"updated_at":"2011-08-15T23:07:52Z","bus_number":"2","created_at":"2011-08-15T23:07:52Z","id":2,"model":"Mercedes","registar_number":"2234","seats":60,"tour_id":1,"updated_at":"2011-08-15T23:07:52Z"]
我正在尝试将此 NSString 转换为 NSDictionary。
当我使用时:
NSDictionary *sourceDictionary = [[response bodyAsString] objectFromJSONString];
我得到这样的 NSDictionary:
(
"bus_number" = 1;
"created_at" = "2011-08-15T23:07:52Z";
id = 1;
model = Setra;
"registar_number" = 123456;
seats = 50;
"tour_id" = 1;
"updated_at" = "2011-08-15T23:07:52Z";
,
"bus_number" = 2;
"created_at" = "2011-08-15T23:07:52Z";
id = 2;
model = Mercedes;
"registar_number" = 2234;
seats = 60;
"tour_id" = 1;
"updated_at" = "2011-08-15T23:07:52Z";
)
但是,这个 NSDictionary 有一个问题,我无法访问它们的元素,有些元素不是 NSStrings(比如模型)。
如何使用 NSStrings 将 JSONString 转换为 NSDictionary?
编辑:
当我尝试登录控制台时:
for (id key in sourceDictionary)
NSLog(@"key: %@, value: %@", key, [sourceDictionary objectForKey:key]);
我得到异常:
-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x1c3a50
【问题讨论】:
你没有得到一个 NSDictionary 这行NSDictionary *sourceDictionary = [[response bodyAsString] objectFromJSONString];
,你得到一个 NSArray
怎么样?对象类是 NSDictionary :-o
objectFromJSONString
返回 id,在这种情况下,它可以返回 NSArray 或 NSDictionary。仅仅因为您选择将变量声明为 NSDictionary *sourceDictionary
并不意味着它将成为字典。你的帖子有两个证明:A)例外(它说 sourceDictionary 它实际上是一个数组)。 B)你得到的“字典”有两个对象,但这些对象没有键,因为它实际上是一个数组;)
【参考方案1】:
如果您是从 RestKit 获得的,并且看起来确实如此,您可以这样做:
NSMutableDictionary *myDictionary = [response.body mutableObjectFromJSONData];
这样,您可以提取原始二进制数据,并且可以避免在此过程中来回转换为字符串的一些不必要(且成本高昂)。另外,我规定了可变的,因为当您获得数据时,您很可能想要操纵或处理数据......再次,JSONKit 超类中的非可变对象和可变对象之间的转换涉及成本......因此,从一开始就使用 mutable,您只是节省了一些时间。
【讨论】:
【参考方案2】:这些实际上是 NSStrings,当您将它们打印到控制台时,它们只是没有引号。
【讨论】:
为什么例如“registar_number”有引号而模型没有? 通常如果只有字母(没有其他符号),它将不带引号显示。 谢谢回答。我刚刚编辑了问题,为什么会出现这个错误?这个循环应该适用于任何带有 NSStrings 的 NSDictionary以上是关于JSONKit反序列化问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 jsonkit 将 JSonString 反序列化为 NSArray