IOS JSON解析包含多个数组

Posted

技术标签:

【中文标题】IOS JSON解析包含多个数组【英文标题】:IOS JSON Parsing Containing Multiple Arrays 【发布时间】:2017-05-04 11:01:18 【问题描述】:

我有一个包含多个对象的 JSON 数组,但我不知道如何将“url”标签作为 NSArray 或 NSDictionary 获取并在 CollectionView 中显示该图像 url。我无法更改 JSON 数据格式。我该怎么做?

JSON 响应如下所示:

   
  "error": false,
  "data": [
    
      "albumid": 2,
      "albumtitle": "Album 2",
      "images": [
        
          "image": "Img2.jpeg",
          "imageid": 11
        ,
        
          "image": "vr4.jpg",
          "imageid": 4
        ,
        
          "image": "3purple b-ball.jpg",
          "imageid": 3
        
      ]
    ,
    
      "albumid": 3,
      "albumtitle": "Album 3",
      "images": [
        
          "image": "vr2.jpg",
          "imageid": 6
        ,
        
          "image": "vr1.jpg",
          "imageid": 5
        
      ]
    ,
    
      "albumid": 4,
      "albumtitle": "Album 4",
      "images": [
        
          "image": "vr1.jpg",
          "imageid": 8
        
      ]
    ,
    
      "albumid": 12,
      "albumtitle": "My Album",
      "images": [
        
          "image": "img3.jpeg",
          "imageid": 64
        ,
        
          "image": "img4.jpeg",
          "imageid": 63
        ,
        
          "image": "img5.jpeg",
          "imageid": 62
        
      ]
    ,
    
      "albumid": 13,
      "albumtitle": "Demo Album",
      "images": [
        
          "image": "img6.jpeg",
          "imageid": 67
        ,
        
          "image": "img7.jpeg",
          "imageid": 66
        ,
        
          "image": "img11.jpeg",
          "imageid": 65
        
      ]
    
  ]

【问题讨论】:

你需要根据你的 json 结构根据部分显示图像。 还要指定语言。 我正在使用 Objective C @SakirSherasiya 【参考方案1】:

尝试这样的事情(数据是您从网络服务器获取的 NSData 对象):

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

if(!jsonError)
    NSArray *dataArray = [jsonData objectForKey:@"data"];
    NSDictionary *albumDict = [dataArray objectAtIndex:0];
    NSArray *imagesArray = [albumDict objectForKey:@"images"];
    NSDictionary *imageDict = [imagesArray objectAtIndex:0];
    NSString *imageURL = [imageDict objectForKey: @"image"];

当然,您必须对数组元素使用循环,此示例仅使用元素 0。多检查一个字段是否存在等会很好。

【讨论】:

【参考方案2】:

您可以创建一个模型来保存图像 id 和 url。您在主模型(相册)中添加这些图像对象的数组。在 Swift 中,您的模型可能如下所示

class Album 
    var albumId = ""
    var albumTitle = ""
    var albumImages = [AlbumImage]()


class AlbumImage 
    var imageId = ""
    var imageUrl = ""

希望这会有所帮助!

【讨论】:

【参考方案3】:

下载json文件后使用此代码。

 NSDictionary *rootDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
 NSArray *rootArray = rootDict[@"data"];
 NSDictionary *subDict;
 NSArray *subArray;
 NSDictionary *tempDict;

 for (int i=0; i<rootArray.count; i++) 
     subDict = rootArray[i];
     subArray = subDict[@"images"];
     for (int j=0; j<subArray.count; j++) 
         tempDict = subArray[j];
         NSLog(@"%@",tempDict[@"image"]);
     
 

在 JSONObjectSerialization 中 data 是 NSData 对象,json 文件下载的地方。

【讨论】:

以上是关于IOS JSON解析包含多个数组的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中解析 json 并将值添加到对象数组

golang生成JSON及解析JSON

在 Swift 中从 JSON 对象解析多个数组

json数据中对象包含对象怎么解析

检查 JSON 文件中是不是存在数组 - iOS

Cocoa iOS 解析 JSON 数组