繁体   English   中英

在iOS中解析JSON字典数组

[英]Parse array of dictionaries of json in ios

我想用这种方式解析这个json

{"img":[{"id":"44","name":"\u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0627\u0644\u0639\u0631\u064a\u0641\u064a","type":"\u0627\u0646\u0627 \u0627\u062a\u0639\u0644\u0645","img":"27039_01355548242.png","school":"\u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0627\u0644\u0639\u0631\u064a\u0641\u064a","isshow":"1","tarteb":"0","date":"29\/1\/2015 01:15","mob":"16544541321"}]}

我写了这段代码来解析它

 NSArray * array = [[NSArray alloc]init];
array = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];
NSDictionary * dic =array[indexPath.row]; //here  is error
NSLog(@"%@",dic);
NSDictionary * info = dic[@"img"];
cell.name.text = info[@"name"];
cell.date.text =info[@"date"];
cell.schoolName.text= info[@"school"];
cell.mobile.text= info[@"mob"];

然后我得到这个错误

[__NSCFDictionary objectAtIndex :]: unrecognized selector sent to instance 0x7c986db0
NSDictionary *jsonDictionary = [[NSDictionary alloc] init];
jsonDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];
NSArray *imageArray = jsonDictionary[@"img"];

NSDictionary *firstObject = imageArray[0];
cell.name.text = firstObject[@"name"];
cell.date.text =firstObject[@"date"];
cell.schoolName.text= firstObject[@"school"];
cell.mobile.text= firstObject[@"mob"];

并且如果json中有多行,例如:

{"img":[{"id":"44","name":"\u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0627\u0644\u0639\u0631\u064a\u0641\u064a","type":"\u0627\u0646\u0627 \u0627\u062a\u0639\u0644\u0645","img":"27039_01355548242.png","school":"\u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0627\u0644\u0639\u0631\u064a\u0641\u064a","isshow":"1","tarteb":"0","date":"29\/1\/2015 01:15","mob":"16544541321"},{"id":"45","name":"\u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0627\u0644\u0639\u0631\u064a\u0641\u064a","type":"\u0627\u0646\u0627 \u0627\u062a\u0639\u0644\u0645","img":"27039_01355548242.png","school":"\u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0627\u0644\u0639\u0631\u064a\u0641\u064a","isshow":"1","tarteb":"0","date":"29\/1\/2015 01:15","mob":"16544541321"},{"id":"46","name":"\u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0627\u0644\u0639\u0631\u064a\u0641\u064a","type":"\u0627\u0646\u0627 \u0627\u062a\u0639\u0644\u0645","img":"27039_01355548242.png","school":"\u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0627\u0644\u0639\u0631\u064a\u0641\u064a","isshow":"1","tarteb":"0","date":"29\/1\/2015 01:15","mob":"16544541321"}]}

然后,如果您需要在第0行中显示id:44 ,在第一行中显示id:44 id:45在第二行中显示id:46 ,...则使用表视图。

//In View Did Load
NSMutableArray *tableDataSource = [NSMutableArray new];
for (int i = 0; i < imageArray.count; i++)
{
    NSDictionary *rowDataDictionary = imageArray[i];
    [tableDataSource addObject:rowDataDictionary];
}


//In Cell For Row
NSDictionary *rowData = tableDataSource[indexPath.row];
cell.name.text = rowData[@"name"];
cell.date.text =rowData[@"date"];
cell.schoolName.text= rowData[@"school"];
cell.mobile.text= rowData[@"mob"];

JsonObjectWithData返回Dictionary,您应该根据JSON的结构解析数据。

希望这可以帮助,

如上所示,JsonObjectWithData返回NSDictionary对象,您应该使用valueForKey方法获取所需的值。

NSDictionary *jsonDictionary = [[NSDictionary alloc] init];
jsonDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];
NSMutableArray *valueForImgLabel = [jsonDictionary valueForKey:@"img"];

如果您对JSON Response对象中的一个元素的价值过高,则应像这样;

{
Name = "Mr. Hope";
Gender = "Male";
Age = 29;
ImageList =     (
            {
        Name = "Front side";
        Image = "11111.JPG";
        Order = 1;
        Date = "07/07/2014";
            },
            {
        Name = "Left Side";
        Image = "22222.JPG";
        Order = 1;
        Date = "10/28/2015";
            });
}

您可以像这样使用valueForkey可转换地获取所有ImageList元素;

NSMutableArray *imageListInJSONFile = [jsonDictionary valueForKey:@"ImageList"][0];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM