json - 尝试解析带引号的 JSON 响应时出现错误

标签 json swift codable

我有来自 API 的 JSON Respose,如下所示:

[{
  "id":"6",
  "name":"Лилия",
  "description":"Сауна "Лилия" ждёт всех тех, кто хочет отдохнуть от суеты в специально созданной для этого атмосфере тепла и уюта. В Вашем распоряжении 3 жаркие сауны, комнаты отдыха, 3 бассейна (один длиной 14 м), в котором Вы можете прекрасно поплавать. Для Вашего удобства всегда в продаже берёзовые и дубовые веники. При желании можно заказать блюда европейской кухни и напитки прямо в сауну. Рады видеть Вас в нашей сауне круглосуточно! Стоимость саун от 350 руб./час - более подробную информацию уточняйте у администратора"
}]

尝试将其解码为我的模型 但出现错误:

dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "Badly formed object around character 58." UserInfo={NSDebugDescription=Badly formed object around character 58.})))

我的代码:

class NetworkService {
    var companies = [Company]()
    let session = URLSession(configuration: .default)

    func getCompanies(stringUrl: String) {

        guard let url = URL(string: stringUrl) else { return }

        let task = session.dataTask(with: url) { (data, response, error) in
            guard let dataResponse = data, error == nil else {
                    print(error?.localizedDescription ?? "Response Error")
                    return
            }

            do {
                self.companies = try JSONDecoder().decode(Array<Company>.self, from: dataResponse)
            } catch let parsingError {
                print("error", parsingError)
            }
        }

        task.resume()
    }
}

型号:

struct Company: Codable {
    let name: String
    let description: String?
}

最佳答案

正确的 json(您需要在 description 的键值内的任何 " 之前添加转义 \)

[{
    "id": "6",
    "name": "Лилия",
    "description": "Сауна \" Лилия \" ждёт всех тех, кто хочет отдохнуть от суеты в специально созданной для этого атмосфере тепла и уюта. В Вашем распоряжении 3 жаркие сауны, комнаты отдыха, 3 бассейна (один длиной 14 м), в котором Вы можете прекрасно поплавать. Для Вашего удобства всегда в продаже берёзовые и дубовые веники. При желании можно заказать блюда европейской кухни и напитки прямо в сауну. Рады видеть Вас в нашей сауне круглосуточно! Стоимость саун от 350 руб./час - более подробную информацию уточняйте у администратора"
}]
<小时/>

尝试

let str = String(data:data, encoding: .utf8)
let actual = str.replacingOccurrences(of: "Сауна \" Лилия \"", with: "Сауна \\" Лилия \\"")

然后改变这个

 self.companies = try JSONDecoder().decode(Array<Company>.self, from: Data(actual.utf8))

关于json - 尝试解析带引号的 JSON 响应时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56611950/

相关文章:

swift - 将 JSON 文件中的对象扁平化为 Swift 中的嵌套对象结构

java - 将 JSON 文件解析为 Java 对象

java - 如何使用Gson解析动态json?

ios - 保存屏幕截图两次而不是一次时出错

json - Swift 4 Codable - bool 值或字符串值

swift - 解码 RealmSwift 类中的可选对象列表

json - 我在 Swift 4 中使用 JSON Codable 返回 NIL - 尝试从嵌套 JSON 示例返回值

json - 2.1 Scala JsValue转Java ObjectNode

Swift build 总是在 Docker 中构建整个包

ios - 如何在 Swift 的 PickerView 中返回两个单独的数组