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

[{"id": "1", "name":"Aaa"}, {"id": "2", "name":"Bbb"}]

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

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

NSError *e = nil;
NSDictionary *JSON = [NSJSONSerialization 
    JSONObjectWithData: data 
    options: NSJSONReadingMutableContainers 
    error: &e];

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

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

推荐答案

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

[{"id": "1", "name":"Aaa"}, {"id": "2", "name":"Bbb"}]

这可能会让您清楚地了解如何处理它:

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);
   }
}

Ios相关问答推荐

从远程通知启动时,iOS 应用程序加载错误

如何在不同设备的segment控制中管理文本大小(text size)?

使用 RxDatasources 作为数据源时如何填充自定义页眉/页脚视图

如何在 Apple Silicon (M1) 上运行 CocoaPods

NavigationLink 只能使用一次

SwiftUI 无法在 HStack 的 Spacer 中点击

如何删除 SwiftUI NavigationView 中的默认导航栏空间

Xcode 11 向后兼容性:“UIWindowScene 仅在 iOS 13 或更高版本中可用”

如何在 iOS 13 的 UISegmentedControl 中更改段的 colored颜色 ?

是否可以在 iOS 13 上选择退出暗模式?

如何在 iOS 中判断暗模式?

如何在 iOS 上以编程方式截取屏幕截图

Command CompileSwift 在 Xcode 10 中因非零退出代码而失败

错误 Appstore 连接:Info.plist 文件中缺少目的字符串

状态栏找不到缓存的时间字符串图像.正在渲染

由于 NSInvalidUnarchiveOperationException 导致 iOS11 WKWebview 崩溃

无法加载从带有标识符的包中的笔尖引用的“”图像

警告:不推荐使用“字符”:请直接使用字符串或子字符串

“项目名称”是经过优化编译的 - 步进可能会表现得很奇怪;变量可能不可用

在默认网络浏览器中打开 URL