2017-03-24 6 views
0

Ich habe eine json Reaktion des folgenden Typs:Wie analysiere ich dieses JSON-Antwortobjekt?

[{ 
    cat_name : value 
    post : [{ 
      title:value 
      image:value 
      content:value 
     }, 
     { 
      title:value 
      image:value 
      content:value 
     }, 
     { 
      title:value 
      image:value 
      content:value 
     }] 
},{ 
    cat_name : value 
    post : [{ 
      title:value 
      image:value 
      content:value 
     }, 
     { 
      title:value 
      image:value 
      content:value 
     }] 
}, 
{ 
cat_name : value 
post : [{ 
     title:value 
     image:value 
     content:value 
     }] 
}] 

und so weiter ...

ich folgendes probiert -

das Antwortobjekt in einem Array gespeichert (responseArray) . Implementiert erste for-Schleife von 0 bis responseArray.count, speicherte den Wert für die Post in einem Array (postArray). Innerhalb der ersten Schleife habe ich die zweite Schleife von 0 bis postArray.count implementiert und den Wert für count von postarray.count zurückgegeben.

EDIT - hat der FOR-Schleife

for (int i = 0; i < responseArrayList.count; i++) { 

    postArrayList = [[responseArrayList objectAtIndex:i] valueForKey:@"post"]; 

    for (int j = 0; j < postArrayList.count; j++) { 

     return postArrayList.count; 

    } 
} 

Es gibt eine Warnung aus, dass die zweite Schleife wird nicht erhöht werden, und würde nur einmal ausgeführt.

Wie setze ich den Rückgabewert für numberOfRowsInSection?

+0

alle "Werte" sind Zeichenketten, die ich müssen Sie in der Tableview-Methode CellForRowAtIndexPath –

+0

verwenden Sie bitte Ihren Code –

+0

Überprüfen Sie die Frage, die ich bearbeitet und hinzugefügt die for-Schleife –

Antwort

0

Remove Linie von der zweiten zur Schleife

return postArrayList.count;

Wenn Ihre Methode etwas zurückgeben möchte, fügen Sie return statement außerhalb von for loop hinzu.

+0

@Akshay lass es mich wissen, wenn es funktioniert. –

+0

Ich habe die return-Anweisung außerhalb der for-Schleife verschoben und ausgeführt. Jetzt in der CellForRowAtIndexPath-Methode habe ich versucht, den Text und das Bild (ich habe eine Bildansicht und eine Bezeichnung in der Prototyp-Zelle) innerhalb und auch außerhalb der for-Schleife (das gleiche für die Schleife ich in der NumberOfRows-Methode verwendet). Hier stürzt die App –

+0

Wenn außerhalb des Fehlers verwendet wird - Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: '- [__ NSSingleObjectArrayI Länge]: unerkannter Selektor an Instanz 0x608000018920 gesendet Und wenn innerhalb des Fehlers heißt - Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: '- [__ NSArrayI length]: nicht erkannter Selektor an Instanz 0x608000305100 gesendet –

0
@interface TableViewController() 

@property(nonatomic)NSArray *responseArrayList; 

@end 

Konvertieren zu JSON-Objekt und speichern Sie es in Ihre globale Variable

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    myJsonString = //here your JSON string response; 
    self.responseArrayList = [NSJSONSerialization JSONObjectWithData:[myJsonString dataUsingEncoding:NSUTF8StringEncoding]options:0 error:NULL]; 
} 


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
     return self.responseArrayList.count;  
} 


- (NSInteger)numberOfRowsInSection:(NSInteger)section{ 
    NSArray *postArrayList = [[responseArrayList objectAtIndex:section] valueForKey:@"post"]; 
    return postArrayList.count; 
} 
0

i Code wie diesen schreiben vorschlagen ...

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

    self.myarray=dict[@"result”][@“post”]; 

//store the value in newObject 

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 

     NSLog(@"%@ my object is ",obj); 
     myobject *object = [[myobject alloc]init]; 
     object.name = obj.productName; 
     object.image = obj.productimage; 

     [_myarray addObject:object]; 

    }];