2017-12-18 244 views
1

我有這樣的JSON:SWIFT 4錯誤的JSON數組解析

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

我有這樣的結構:

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

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

所以,當我運行這樣的請求:

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) 
      } 
     } 

and print response.value我得到這個:

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

我無法解析它。我該如何解決它?

+0

改變你的結構命名是否正確; 'Response'和'Resp2' – Paulw11

+0

編輯結構。 – Dmitry

回答

1

解碼失敗由你定義TITLE:String的結構resp2

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

引起的,但在JSON你有一個Int"TITLE":123。 如果您真的想要String(有道理,因爲是「標題」),您可能需要修復服務器端。


編輯

我想能夠解碼的,因爲它是現在,我能夠恢復您的結構,你可以檢查與:

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 _ { 
} 

那麼我想,必須有當你從服務接收到數據時會變得很奇怪。

+0

但是在json中它是有效的字符串: {「result」:0,「data」:[{\「ID」:7,「TITLE」:「123」},{\「ID」:8,「 TITLE「:」123「}] 爲什麼它以這種方式代表主題? – Dmitry

+0

上面寫着:''TITLE「:123'無論如何,我猜你仍然有問題嗎? –

+0

是的,我編輯了這個主題,但我仍然有問題。我已將TITLE更改爲INT - 沒有結果,更改爲字符串 - 仍然沒有運氣 – Dmitry