无法使用 Swift Decodable 解码包含在大括号、转义字符和双引号内的 json 字符串值

问题描述

这是我尝试使用 Swift Decodable 解码的一段 json 代码

var json = """
        {
           "orders":[
              {
                "extra":"{\"desired_pick_up_time\":\"ASAP\"}"
              }
           ]
        }
"""

如您所见,包含在 :

中的额外键的值
  • 大括号
  • 转义字符
  • 双引号。

这使得解码非常棘手。

这是我为了解码而编写的模型:

struct Welcome: Decodable {
    let orders: [Order]
}

// MARK: - Order
struct Order: Decodable {
    let extra: String
}

当我尝试解码时返回一个 nil 值:

let jsonData = json.data(using: .utf8)!

let decoder = JSONDecoder()

do {
    let welcome = try? decoder.decode(Welcome.self,from: jsonData)
    print(welcome)
} catch {
    print(error)
}

解决方法

首先 - 正如评论中提到的 - JSON 中的反斜杠必须使用多行字符串文字语法进行转义

axios.interceptors.request.use(config=>{
     //returns correct base but not changed url  
     console.log(`the page is ${config.params.page} the url is {config.url}`);
     return config;
   },error=>{
     return Promise.reject(error);
   });

let json = """ { "orders":[{"extra":"{\\"desired_pick_up_time\\":\\"ASAP\\"}"}] } """ 的所有值中的第二个是另一个需要在第二级解码的 JSON 字符串。这需要实现 extra

init(from decoder