处理 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];
}
}
以下是来自网络服务的数据。我想将密钥和对组合成数组。基本上我收到的数据是带有键值对的字典数组,但是键 '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];
}
}