简体   繁体   English

尝试使用引号解析JSON Response时出错

[英]Getting error when try to parsing JSON Response with quotation marks

I have JSON Respose from API like this: 我有这样的API的JSON Respose:

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

Trying to decode it to my Model But getting error: 试图将其解码到我的模型但是得到错误:

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.}))) dataCorrupted(Swift.DecodingError.Context(codingPath:[],debugDescription:“给定数据无效JSON。”,underlyingError:可选(错误域= NSCocoaErrorDomain Code = 3840“字符58周围形成不良对象。”UserInfo = {NSDebugDescription =字符58周围形成不良的对象。})))

My code: 我的代码:

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

Model: 模型:

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

Correct json ( you need to add escaping \\ before any " inside description 's key value) 纠正json(你需要在任何"内部description的键值"之前添加转义\\

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

Try 尝试

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

Then change this 然后改变这个

 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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM