2016-06-10 24 views
2

Ich habe ein JSON-Array mit mehreren Objekten und ich weiß nicht, wie greife ich das "url" -Tag als NSArray oder NSDictionary und zeigen Sie diese Bild URL in Tableview. Ich kann das JSON-Datenformat nicht ändern. Wie soll ich das machen?iOS JSON Parsing, Array mit mehreren Array

Hier ist, was die JSON-Antwort wie folgt aussieht:

{ 
"meta": { 
    "total_count": 10 
}, 
"pages": [ 
    { 
     "id": 7, 
     "meta": { 
      "type": "dashboard.NewsEvents", 
      "detail_url": "http://suno.to/api/v1/pages/7/" 
     }, 
     "title": "NoEvent", 
     "created_at": "2016-03-06T10:42:19.646000Z", 
     "cover_url": [ 
      [ 
       { 
        "url": "/media/images/Maha_Shivratri2.original.jpg", 
        "title": "Maha Shivratri2.jpg" 
       }, 
       { 
        "url": "/media/images/Maha_Shivratri1.original.jpg", 
        "title": "Maha Shivratri1.jpg" 
       } 
      ], 
      [ 
       { 
        "url": "/media/images/Celebrations.original.jpg", 
        "title": "Celebrations.jpg" 
       }, 
       { 
        "url": "/media/images/Crew.original.jpg", 
        "title": "Crew.jpg" 
       }, 
       { 
        "url": "/media/images/World_record.original.jpg", 
        "title": "World record.jpg" 
       }, 
       { 
        "url": "/media/images/AI_pilots.original.jpg", 
        "title": "AI pilots.jpg" 
       } 
      ], 
      [ 
       { 
        "url": "/media/images/CbVv-VbWEAAmwv_.original.jpg", 
        "title": "DAL SWARAJ YATRA" 
       }, 
       { 
        "url": "/media/images/CbVv_-TWwAE7RjM.original.jpg", 
        "title": "DAL SWARAJ YATRA" 
       }, 
       { 
        "url": "/media/images/CbVv_SmXIAALQP8.original.jpg", 
        "title": "DAL SWARAJ YATRA" 
       }, 
       { 
        "url": "/media/images/CahEc--UkAArc_z.original.jpg", 
        "title": "DAL SWARAJ YATRA" 
       } 
      ] 
     ] 
    }, 
    { 
     "id": 2530, 
     "meta": { 
      "type": "dashboard.NewsEvents", 
      "detail_url": "http://suno.to/api/v1/pages/2530/" 
     }, 
     "title": "World Culture Festival", 
     "created_at": "2016-03-12T06:59:21.023000Z", 
     "cover_url": [ 
      [ 
       { 
        "url": "/media/images/Security.original.jpg", 
        "title": "Security check" 
       } 
      ], 
      [ 
       { 
        "url": "/media/images/Elephant_statues.original.jpg", 
        "title": "Elephant" 
       } 
      ], 
      [ 
       { 
        "url": "/media/images/6.original.jpg", 
        "title": "Stage" 
       }, 
       { 
        "url": "/media/images/4.original.jpg", 
        "title": "Stage" 
       } 
      ] 
     ] 
    }, 
    { 
     "id": 2675, 
     "meta": { 
      "type": "dashboard.NewsEvents", 
      "detail_url": "http://suno.to/api/v1/pages/2675/" 
     }, 
     "title": "Holi in Barsana", 
     "created_at": "2016-03-17T12:35:09.308000Z", 
     "cover_url": [ 
      [ 
       { 
        "url": "/media/images/Brajwasi_playing_holi_.original.jpg", 
        "title": "Holi in Barsana" 
       }, 
       { 
        "url": "/media/images/dancing_.original.jpg", 
        "title": "Holi in Barsana" 
       }, 
       { 
        "url": "/media/images/holi.._.original.jpg", 
        "title": "Holi in Barsana" 
       }, 
       { 
        "url": "/media/images/holi..._.original.jpg", 
        "title": "Holi in Barsana" 
       } 
      ], 
      [ 
       { 
        "url": "/media/images/Lathmar_holi_19_n54f7LJ.original.jpg", 
        "title": "Lathmar Holi in Barsana" 
       } 
      ], 
      [ 
       { 
        "url": "/media/images/Lathmar_holi_17.original.jpg", 
        "title": "Lathmar Holi in Barsana" 
       }, 
       { 
        "url": "/media/images/Lathmar_holi_20.original.jpg", 
        "title": "Lathmar Holi in Barsana" 
       } 
      ] 
     ] 
    }, 

ich diesen Code bin mit dem "url" Array zu erhalten. PLZ mich korrigieren?

NSArray *imageUrlArray = [[self.jsonData objectAtIndex:indexPath.row]objectForKey:@"cover_url"]; 
    NSLog(@"IMAGE URL ARRAY:%@",imageUrlArray); 


    NSString *imageUrl = [imageUrlArray valueForKey:@"url"]; 
    NSLog(@"IMAGE URL:%@",imageUrl); 
+0

Ist self.jsonData ist Array von Seiten Schlüssel? –

+0

ja. @ NiravDoctorwala – Mukesh

+0

@Mukesh, schau auf meinen Code. – Vyacheslav

Antwort

0

die JSON-Struktur anzuzeigen - http://jsonviewer.stack.hu/

NSMutableArray* imageurlArray = [NSMutableArray new]; 
NSArray* jsonArray = jsonData[@"pages"]; 

for (int i = 0; i<[jsonArray count]; i++) { 
    NSArray* coverUrlArray = jsonArray[i][@"cover_url"]; 
    for (int t = 0; t< [coverUrlArray count]; t++) { 
     NSArray* UrlArray = coverUrlArray[t]; 
     for (int x = 0; x<[UrlArray count]; x++) { 
      [imageurlArray addObject:UrlArray[x][@"url"]]; 
     } 
    } 
} 
NSLog(@"imageurlArray: %@", imageurlArray); 

//imageurlArray contains all url 
//In cell for row at indexpath --> use imageurlArray[indexPath.row]; 
0

Sie haben Array von einem anderen Array umgebrochen. So verwenden diese Richtung:

NSDictionary *json=//..initialized 
    NSArray *pages = [json [email protected]"pages"]; 
    NSDictionary *page = [pages objectAtIndex:0]; 
    NSArray *ar1 = [page [email protected]"cover_url"]; 
      NSArray *ar2 = [ar1 objectAtIndex:0]; 
      NSDictionary *elem = [ar2 objectAtIndex:0]; 
      NSString *value = [elem [email protected]"url"]; 
0

Ich würde mit Mantel oder JSONModel Bibliotheken vorschlagen Objekte zum Parsen und mit anständigen DTOs.

0

Wenn Sie sich mit so etwas beschäftigen, schlage ich vor, den kompletten JSON in http://jsonviewer.stack.hu/ zu setzen, damit Sie die korrekte Struktur sehen können, ohne sich zu verwirren.

Dann ist es nur eine Frage des Grabens. Wenn Sie {} sehen, fügen Sie ein Wörterbuch hinzu, wenn Sie [] sehen, fügen Sie ein Array hinzu, bis Sie Ihr URL-Objekt erreichen :)

Ich schreibe den Code nicht, weil es ziemlich trivial ist, nur eine Mischung von objectForKeys für Wörterbücher und objectAtIndex für Arrays.

Die letzten Ebenen sind nur Objekte, so dass sie wie jedes andere Objekt behandelt werden.

Wenn Sie über Json verwirrt sind, schlage ich vor, Sie versuchen, geben Sie Ihrem JSON-Parser eine einfache JSON (Sie hardcore es selbst oben, es ist wirklich nur zum Testen).

Kleiner Tipp:

es Geben Sie ein einfaches Array von 1 Objekt, dann 2, dann in einem dict das Array setzen, dann zwei, usw. und Sie halten so dass die json komplexer, bis Sie wirklich verstehen, wie es funktioniert. Dann werden Sie schließlich eine gefälschte json müssen nur Ihre wirklichen mögen, und Sie können die gefälschten entfernen und verwenden Sie die reale :)

Weitere Hinweise:

Es gibt viele json Bibliotheken Parsen, die Sie die erstellen lassen Objektmodell, in dem Sie beispielsweise ein Objekt Page mit einer ID, einem Titel, einem Cover URl usw. erstellen können, das mit der JSON-Struktur übereinstimmt, und dann dem Parser einfach mitteilen, "dass JSON eine Seite erstellen soll!" und voilà, du hast eine Seite. Ich kenne keine dieser json Bibliotheken in IOS, aber die Leute werden es sicher hier verlinken, also probier es aus! Sie sind super einfach zu bedienen und machen json Parsing sehr einfach. Und auch, Sie müssen nicht alles Karte manuell wie du tust;)