【问题标题】:Problematic parsed JSON object format. How to decode JSON object below in Swift 5?有问题的解析 JSON 对象格式。如何在 Swift 5 中解码下面的 JSON 对象?
【发布时间】:2020-09-22 18:12:05
【问题描述】:
{
    0 =     {
        bitrate = 320;
        dloadUrl = "www.example.com";
        mp3size = "20.1 MB";
    };
    1 =     {
        bitrate = 256;
        dloadUrl = "www.example.com";
        mp3size = "16.08 MB";
    };
    2 =     {
        bitrate = 192;
        dloadUrl = "www.example.com";
        mp3size = "12.06 MB";
    };
    3 =     {
        bitrate = 128;
        dloadUrl = "www.example.com";
        mp3size = "8.04 MB";
    };
    4 =     {
        bitrate = 64;
        dloadUrl = "www.example.com";
        mp3size = "4.02 MB";
    };
}

尝试解码我​​收到的 API 响应,但解码时遇到问题。看起来格式与 JSON 对象的格式不太一样。请帮忙,我对编码比较陌生。我正在使用 xcode 并用 swift 5 编写。

【问题讨论】:

  • 其实这不是一个合法的json,你可以学习一下:jsonlint.com

标签: json xcode parsing format swift5


【解决方案1】:

那不是一个有效的 json。在您的情况下,一个有效的 json 将是:

{
    "0": {
        "bitrate": 320,
        "dloadUrl": "www.example.com",
        "mp3size": "20.1 MB"
    },
    "1": {
        "bitrate": 256,
        "dloadUrl": "www.example.com",
        "mp3size": "16.08 MB"
    },
    "2": {
        "bitrate": 192,
        "dloadUrl": "www.example.com",
        "mp3size": "12.06 MB"
    },
    "3": {
        "bitrate": 128,
        "dloadUrl": "www.example.com",
        "mp3size": "8.04 MB"
    },
    "4": {
        "bitrate": 64,
        "dloadUrl": "www.example.com",
        "mp3size": "4.02 MB"
    }
}

你会像这样解码:

struct MyJson: Codable {
    let bitrate: Int
    let dloadUrl: String
    let mp3size: String
}

let json = ...
let data = json.data(using: .utf8)
let decoder = JSONDecoder()

do {
    let res = try decoder.decode([Int: MyJson].self, from data)
    print(res)
} catch {
    print(error)
}

【讨论】:

    猜你喜欢
    • 2020-05-08
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    相关资源
    最近更新 更多