首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用NSJSONSerialization

如何使用NSJSONSerialization
EN

Stack Overflow用户
提问于 2011-12-02 21:14:15
回答 10查看 222.6K关注 0票数 158

我有一个JSON字符串(来自PHP的json_encode(),看起来像这样:

代码语言:javascript
复制
[{"id": "1", "name":"Aaa"}, {"id": "2", "name":"Bbb"}]

我想把它解析成我的iPhone应用程序的某种数据结构。我想对我来说最好的办法是拥有一个字典数组,所以数组中的第0个元素是一个具有键"id" => "1""name" => "Aaa"的字典。

不过我不明白NSJSONSerialization是如何存储数据的。到目前为止,我的代码如下:

代码语言:javascript
复制
NSError *e = nil;
NSDictionary *JSON = [NSJSONSerialization 
    JSONObjectWithData: data 
    options: NSJSONReadingMutableContainers 
    error: &e];

这只是我在另一个网站上看到的一个例子。我一直试图通过打印出元素的数量来读取JSON对象,但我总是得到EXC_BAD_ACCESS

如何使用NSJSONSerialization解析上面的JSON,并将其转换为我提到的数据结构?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-12-02 21:20:22

您的根json对象不是一个字典,而是一个数组:

代码语言:javascript
复制
[{"id": "1", "name":"Aaa"}, {"id": "2", "name":"Bbb"}]

这可能会让你清楚地知道如何处理它:

代码语言:javascript
复制
NSError *e = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];

if (!jsonArray) {
  NSLog(@"Error parsing JSON: %@", e);
} else {
   for(NSDictionary *item in jsonArray) {
      NSLog(@"Item: %@", item);
   }
}
票数 217
EN

Stack Overflow用户

发布于 2012-04-27 16:29:05

这是我用来检查收到的json是数组还是字典的代码:

代码语言:javascript
复制
NSError *jsonError = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&jsonError];

if ([jsonObject isKindOfClass:[NSArray class]]) {
    NSLog(@"its an array!");
    NSArray *jsonArray = (NSArray *)jsonObject;
    NSLog(@"jsonArray - %@",jsonArray);
}
else {
    NSLog(@"its probably a dictionary");
    NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
    NSLog(@"jsonDictionary - %@",jsonDictionary);
}

我已经尝试了这个选项:kNilOptions和NSJSONReadingMutableContainers,并且对这两个选项都能正常工作。

显然,在if-else块中创建NSArray或NSDictionary指针时,实际的代码不可能是这样的。

票数 75
EN

Stack Overflow用户

发布于 2011-12-02 21:22:51

这对我很管用。您的data对象可能是nil,正如rckoenes所指出的,根对象应该是一个(可变)数组。请参阅以下代码:

代码语言:javascript
复制
NSString *jsonString = @"[{\"id\": \"1\", \"name\":\"Aaa\"}, {\"id\": \"2\", \"name\":\"Bbb\"}]";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *e = nil;
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&e];
NSLog(@"%@", json);

(我必须用反斜杠转义JSON字符串中的引号。)

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8356842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档