代码之家  ›  专栏  ›  技术社区  ›  Jan

可编码/可解码不是解码

  •  0
  • Jan  · 技术社区  · 9 年前

    我发现当我删除这行时:

     "address_format": "{{recipient}}\n{{street}}\n{{postalcode}} {{city}}\n{{country}}",
    

    这似乎奏效了。

    (JSON已验证)

    import UIKit
    
    struct Country : Decodable {
    
        enum CodingKeys: String, CodingKey {
            case continent
            case alpha2
            case name
        }
    
        var name : String?
        var continent : String?
        var alpha2 : String?
    
    }
    
    let json = """
    [
    {
    "continent": "Europe",
    "alpha2": "AD",
    "alpha3": "AND",
    "country_code": "376",
    "currency": "EUR",
    "international_prefix": "00",
    "ioc": "AND",
    "latitude": "42 30 N",
    "longitude": "1 30 E",
    "name": "Andorra",
    "names": [
    "Andorre",
    "Andorra",
    "アンドラ"],
    "translations": {
    "en": "Andorre",
    "it": "Andorra",
    "de": "Andorra",
    "fr": "Andorre",
    "es": null,
    "ja": "アンドラ",
    "nl": "Andorra",
    "ru": "Андорра"},
    "national_destination_code_lengths": [2],
    "national_number_lengths": [6,7,8,9],
    "national_prefix": "None",
    "number": "020",
    "region": "Europe",
    "subregion": "Southern Europe",
    "un_locode": "AD",
    "languages": ["ca"],
    "nationality": "Andorran"},
    {
    "continent": "Asia",
    "address_format": "{{recipient}}\n{{street}}\n{{postalcode}} {{city}}\n{{country}}",
    "alpha2": "AE",
    "alpha3": "ARE",
    "country_code": "971",
    "currency": "AED",
    "international_prefix": "00",
    "ioc": "UAE",
    "latitude": "24 00 N",
    "longitude": "54 00 E",
    "name": "United Arab Emirates",
    "names": [
    "United Arab Emirates",
    "Vereinigte Arabische Emirate",
    "Émirats Arabes Unis",
    "Emiratos Árabes Unidos",
    "アラブ首長国連邦",
    "Verenigde Arabische Emiraten"],
    "translations": {
    "en": "United Arab Emirates",
    "it": "Emirati Arabi Uniti",
    "de": "Vereinigte Arabische Emirate",
    "fr": "Émirats Arabes Unis",
    "es": "Emiratos Árabes Unidos",
    "ja": "アラブ首長国連邦",
    "nl": "Verenigde Arabische Emiraten",
    "ru": "Объединенные Арабские Эмираты"},
    "national_destination_code_lengths": [2],
    "national_number_lengths": [7,8,9],
    "national_prefix": "0",
    "number": "784",
    "region": "Asia",
    "subregion": "Western Asia",
    "un_locode": "AE",
    "languages": ["ar"],
    "nationality": "Emirian"}
    ]
    """.data(using: .utf8)!
    
    let decoder = JSONDecoder()
    do {
        let countries = try decoder.decode([Country].self, from: json)
        print(countries)
    
    } catch {
        print("erro")
    }
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   vadian    9 年前

    如果您要打印实际的错误信息

    “字符722周围的未转义控制字符。”

    "erro" 解决方案显而易见:

    换行符 \n 必须转义:

    "address_format": "{{recipient}}\\n{{street}}\\n{{postalcode}} {{city}}\\n{{country}}",
    

    let json = """
    [
    ...
    ]
    """.replacingOccurrences(of: "}\n{", with: "}\\n{").data(using: .utf8)!