2016-07-29 36 views
0

Unten finden Sie Daten vom Webdienst. Ich möchte den Schlüssel und das Paar in Array kombinieren. Grundsätzlich sind die Daten, die ich erhalten habe, Array von Wörterbuch mit Schlüsselwertpaar, aber wieder ein Schlüssel "records" ist Array von Wörterbuch. Wie verarbeitet man das? Ich hatte meine gewünschte Leistung unten angegeben. Es wäre toll wenn dir jemand helfen könnte. Bitte beachten Sie, können ‚Aufzeichnungen‘ eine beliebige 1, 2 oder mehr (für Illustrationszwecke, i die Anzahl der Datensatz als 1 gegeben hatte, und 2)Verarbeitung von NSDictionary-Daten

<__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"; 
} 
) 

Ich möchte die Ausgabe wie die unten

{ 
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"; 
} 

Versuchte

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]; 

Edited - Ausgabe

Wenn Sie das obige tatsächliche Json-Objekt sehen, gibt es 75 und 76 in aa, aber nur ein Wert wird im endgültigen Array wie unten angegeben gespeichert.

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

Zeigen Sie uns, was Sie bisher versucht haben. –

+0

Ich war in der Lage, die Daten von 'Aufzeichnungen' zu bekommen, aber nicht sicher, wie man den ganzen Schlüssel in das Array kombiniert. Bitte überprüfen Sie meine bearbeitete Version – user3310076

Antwort

2

ich denke, das tun sollten, was Sie wollen, werden Sie mit einem Array am Ende enthält ein Wörterbuch für jedes Datensatzobjekt. (Angenommen, inputArray ist eine NSArray im Format Ihrer Frage.) Ich habe versucht zu kommentieren, was in jeder Zeile passiert.

//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]; 
    } 
} 
+0

Können Sie dies bitte entsprechend meiner gewünschten Ausgabe und basierend auf den zur Verfügung gestellten Daten ausführen? – user3310076

+0

Ich habe Beispielausgabe hinzugefügt, es ist identisch mit der Ausgabe, die Sie wollten, vorausgesetzt, dass Sie in einem Array das gleiche Format wie in Ihrer Frage übergeben. –

+0

Ja, das OP, das Sie zur Verfügung gestellt haben, ist was ich will, aber können Sie den Code im Detail bereitstellen? Wo muss ich den Wert für 'a', 'b', 'c' ... 'aa', bb 'usw. setzen? Können Sie bitte den detaillierten Code posten, da ich den von Ihnen bereitgestellten Code nicht befolgen konnte? – user3310076

0

dies versuchen,

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]; 
    } 
+0

Danke! Dies funktioniert, bis auf ein Problem, wenn 2 Einträge zum selben Wörterbuch gehören, dann wird nur einer gespeichert. Siehe meinen bearbeiteten Bereich. Einige, wenn es zwei verschiedene oberste Wörterbuch enthält einen Datensatz, dann hat das Array 3 mal, sollte es nur 2. – user3310076

+0

Thanks Amit. Dies wird auch in einigen Fällen hilfreich sein. Danke, dass du mir geholfen hast! – user3310076

0

Sie werden als durch jedes Wörterbuch gehen:

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"]]; 

    }