2017-12-18 13 views
1

ich die json wie dieses:swift 4 falsch json Array Parsen

{"result":0,"data":[{\"ID":7,"TITLE":"123"},{\"ID":8,"TITLE":"123"}]} 

Ich habe die Struktur wie folgt aus:

struct ResponseResult: Decodable { 
let result: Int 
let data: [IdResponseResult] 
} 

struct IdResponseResult: Decodable { 
let ID: Int 
let TITLE: String 
} 

Also, wenn ich Anfrage wie folgt ausführen:

Alamofire.request("https://xxx.xxx.xxx",headers:headers).responseJSON { response in 
      if let json = response.data { 
       let decoder = JSONDecoder() 
       let result = try? decoder.decode(ResponseResult.self, from: json) 
       print(response.value) 
       completion(result) 
      } 
     } 

und drucken response.value Ich bekomme Folgendes:

data =  (
       { 
      "ID" = 7; 
      TITLE = 123; 
     }, 
       { 
      "ID" = 8; 
      TITLE = 123; 
     } 
    ); 
    result = 0; 
} 

Und ich kann es nicht analysieren. Wie kann ich es lösen?

+0

Ändern Sie Ihre Strukturen so, dass sie korrekt benannt werden. "Response" und "Resp2" – Paulw11

+0

editierte Strukturen. – Dmitry

Antwort

1

der Decodierungsfehler wird durch die Struktur verursacht resp2

struct resp2: Decodable { 
    let ID: Int 
    let TITLE: String 
} 

Sie TITLE:String definieren, aber in der JSON haben Sie eine Int"TITLE":123. Falls Sie wirklich eine String (sinnvoll, da ist ein "Titel") möchten, müssen Sie möglicherweise die Server-Seite beheben.


bearbeiten:

ich die Dekodierbare versucht, wie es jetzt ist, und ich bin in der Lage Ihre Strukturen zu erholen, können Sie überprüfen mit:

let string = "{\"result\": 0,\"data\": [{\"ID\": 7,\"TITLE\": \"123\"}, {\"ID\": 8,\"TITLE\": \"123\"}]}" 
let data = string.data(using: .utf8) 
do { 
    let decoder = JSONDecoder() 
    let result = try? decoder.decode(ResponseResult.self, from: data!) 
    print(result?.data.first?.TITLE ?? "") // 123 
} catch _ { 
} 

Dann habe ich denke, es hat zu Seien Sie etwas seltsam, wenn Sie die Daten vom Service erhalten.

+0

Aber in der JSON ist es actually String: {"Ergebnis": 0, "Daten": [{"ID": 7, "TITLE": "123"}, {\ "ID": 8, " TITLE ":" 123 "}] Warum es so wie im Thema darstellt? – Dmitry

+0

Oben wurde geschrieben: '" TITLE ": 123' Wie auch immer, ich schätze, du hast immer noch das Problem, richtig? –

+0

Ja, ich habe das Thema bearbeitet, aber ich habe immer noch das Problem. Ich habe TITLE in INT geändert - kein Ergebnis, geändert in String - immer noch kein Glück – Dmitry