2017-12-18 241 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