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解析包含多个数组的主要内容,如果未能解决你的问题,请参考以下文章