尝试分析带引号的 JSON 响应时出错

  • 本文关键字:JSON 响应 出错 json swift codable
  • 更新时间 :
  • 英文 :


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

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

尝试将其解码为我的模型但是得到错误:

dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "给定的数据不是有效的 JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "字符 58 周围的对象格式不正确。UserInfo={NSDebugDescription=字符 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))

Попытаюсь я:

import Foundation
let badJsonString = "{"id":"2","description":"any "bad" description"}"
let okJsonString  = badJsonString.replacingOccurrences(of: #"(?<= )"|"(?= )"#, with: "'", options: .regularExpression)
let jsonData = try JSONSerialization.jsonObject(with: Data(okJsonString.utf8))
print(jsonData)

相关内容

  • 没有找到相关文章

最新更新