在json数据

时间:2017-01-06 05:09:07

标签: ios nsmutablearray nsmutabledictionary

这里是我的json数据http://pastie.org/10988178我想在特定项目中添加发票ID。如果一个发票有3个项目项目,则每个项目数组添加特定的InvoiceID

"ItemDetails":[
{
"ItemId":1,
"ItemType":1,
"InvoiceDetailId":1,
"UPC":"UPCCODE1",
"SKU":"Item 1",
"Description":"Item Description",
"Qty":12,
"PunchListPart":"Item Part New if return item",
"Comment":"Comment1",
"BarCode":""
"InvoiceId":95
},

我想要这样的输出

这是我的代码但没有工作

NSLog(@"item=%lu",[[ret_val valueForKey:@"ItemDetails" ] count]);
    NSArray *testarray=[ret_val valueForKey:@"ItemDetails" ];
    NSMutableArray *item=[[NSMutableArray alloc]init];
    for(int i=0; i<[[ret_val valueForKey:@"ItemDetails" ] count]; i++) {

        NSMutableDictionary *dictValues = [NSMutableDictionary dictionaryWithDictionary:testarray[i]];
        [dictValues setValue:[[ret_val objectForKey:@"InvoiceId"] objectAtIndex:i] forKey:@"InvoiceId"];
        [item addObject:dictValues];
    }
    NSLog(@"item=%@",item);

ret_val是我所有json数据中的NSMutableDictionary。

2 个答案:

答案 0 :(得分:1)

问题在于ret_val是您的根JSON Dictionary,而您希望InvoiceId数组位于data数组中ret_val字典。因此,您需要使用dataArray访问它,也可以使用for each循环来减少代码。

NSMutableArray *items = [[NSMutableArray alloc] init];
NSArray *dataArray = [ret_val objectForKey:@"data"];
for (NSDictionary *dic in dataArray) {
     //Now loop through the `ItemDetails` array.
     NSArray *itemDetails = [dic objectForKey:@"ItemDetails"];
     for (NSDictionary *itemDic in itemDetails) {
          NSMutableDictionary *dictValues = [NSMutableDictionary dictionaryWithDictionary:itemDic];
          [dictValues setValue:[dic objectForKey:@"InvoiceId"] forKey:@"InvoiceId"];
          [items addObject:dictValues];
     }
}
NSLog(@"%@", items)

答案 1 :(得分:0)

看起来你会遇到异常,请查看Nirav Code,如下所示。

if([NSNull null] != [dic objectForKey:@"ItemDetails"])

NSDictionary不允许值为nil,因此它们存储为null。 这就是为什么我建议进行空检查。

希望它有效。