处理 NSDictionary 数据

Processing NSDictionary Data

以下是来自网络服务的数据。我想将密钥和对组合成数组。基本上我收到的数据是带有键值对的字典数组,但是键 'records' 也是字典数组。如何处理这个?我在下面给出了我想要的输出。如果有人可以帮助我,那就太好了。请注意,'records' 可以是任何 1、2 或更多(为了说明目的,我将记录计数设为 1 和 2)

<__NSCFArray 0x7feb44c0e400>(
{
    a = "string";
    b = "string";
    records =     (
                {
            aa = "first array's first record";
            bb = "first array's first record";
            cc = "first array's first record";
        }
    );
    c = "somevalue";
    d = "some value";
    e = "some value";
},


{
    a = "string";
    b = "string";
    records =     (
                {
            aa = "second array's first record";
            bb = "second array's first record";
            cc = "second array's first record";
        },
                {
            aa = "second array's second record";
            bb = "second array's second record";
            cc = "second array's second record";
        }
    );
    c = "some value";
    d = "some value";
    e = "some value";
}
)

我想要如下所示的输出

  {
a = "string";
b = "string";
aa = "first array's first record";
bb = "first array's first record";
cc = "first array's first record";
c = "somevalue";
d = "some value";
e = "some value";
},

{
a = "string";
b = "string";
aa = "second array's first record";
bb = "second array's first record";
cc = "second array's first record";
c = "some value";
d = "some value";
e = "some value";
},

{
a = "string";
b = "string";
aa = "second array's second record";
bb = "second array's second record";
cc = "second array's second record";
c = "some value";
d = "some value";
e = "some value";
}

尝试过

NSDictionary *receivedDictionary = self.responseDictionary;
  NSArray *finalArray = [[NSArray alloc]init];
  NSMutableArray *array;
  for (int i=0; i<[receivedDictionary count]; i++) {
     array = [[receivedDictionary valueForKey:@"records"]objectAtIndex:i];

  }
  finalArray = [array arrayByAddingObjectsFromArray:array];

已编辑 - 输出

{
        a = "some string";
        b = "some string";
        records =         (
                        {
                aa = 75;
                bb = "some string";
                cc = "some string ";
            },
                        {
                aa = 76;
                bb = "some string";
                cc = "some string";
            }
        );
        c = "some value";
        d = "some value";
        e = "some value";
    }
)

如果你看到上面的实际json对象,aa中有75和76,但最终数组中只保存了一个值,如下所示。

{
        a = "some string";
        b = "some string";
        c = "some value";
        d = "some value";
        aa = 76;
        bb = "some string"";
        cc = "some string";
        e = "some string";
    }
)

试试这个,

 NSMutableArray *finalArray = [[NSMutableArray alloc]init];
    NSArray *jsonArray; // Your Json array Object
    for(NSDictionary * outerDictionary in jsonArray)
    {
        NSMutableDictionary *objectDictionary = [[NSMutableDictionary alloc]init];
        [objectDictionary setValue:outerDictionary[@"a"] forKey:@"a"];

        [objectDictionary setValue:outerDictionary[@"b"] forKey:@"b"];



 NSArray *records = outerDictionary[@"record"];
    for (NSDictionary *record in records) {

            [objectDictionary setValue:record[@"aa"] forKey:@"aa"];

            [objectDictionary setValue:record[@"bb"] forKey:@"bb"];

            [objectDictionary setValue:record[@"cc"] forKey:@"cc"];

        }
        [objectDictionary setValue:outerDictionary[@"c"] forKey:@"c"];

        [objectDictionary setValue:outerDictionary[@"d"] forKey:@"c"];

        [objectDictionary setValue:outerDictionary[@"e"] forKey:@"e"];
        [finalArray addObject:objectDictionary];
    }

您必须按以下方式浏览每本词典:

for (int i=0; i<[records count]; i++) {
        NSDictionary *dict = [records objectAtIndex:i];
        [dictValues addObject:[dict valueForKey:@"aa"]];
        [dictValues addObject:[dict valueForKey:@"bb"]];
        [dictValues addObject:[dict valueForKey:@"cc"]];

    }

我认为这应该可以满足您的要求,您最终会得到一个包含每个记录对象的字典的数组。 (假设 inputArray 是您问题格式中的 NSArray。)我试图评论每一行发生的事情。

//First we initialize an empty array to store all the values.   
NSMutableArray *finalOutput = [NSMutableArray array];
//Next we loop through every dictionary in your input array.
for (NSDictionary *outerDict in inputArray) {
    //Make a copy of that dictionary
    NSMutableDictionary *outerCopy = [outerDict mutableCopy];
    //but remove the records object as we'll add that back again in the next step
    [outerCopy removeObjectForKey:@"records"];
    //Now we loop through all the records for outerDict
    for (NSDictionary *record in outerDict[@"records"]) {
        //Make a mutable copy
        NSMutableDictionary *flattenedDict = [record mutableCopy];
        //Add back the values from the outerCopy
        [flattenedDict addEntriesFromDictionary:outerCopy];
        //And add this final flattened dictionary to the output array
        [finalOutput addObject:flattenedDict];
    }
}