【问题标题】:Swift decode json with key starting as a number以数字开头的键快速解码 json
【发布时间】:2019-06-26 18:37:42
【问题描述】:

我有一个以下格式的 json:

let json = """
{
    "stuff": {
        "1": "one",
        "2": "two",
        "4": "four"
    }
}

问题是我怎么做我的

struct Stuff: Codable, Equatable {
    let 1: String
    let 2: String
    let 4: String
}

编译并工作?

我习惯在下面调用它,它适用于所有内容,但如果让名称以数字开头,它显然不会编译

let obj = try? JSONDecoder().decode(T.self, from: data)

【问题讨论】:

    标签: json swift


    【解决方案1】:

    你不能。变量不能以数字字符开头。不可更改的规则。

    但是你可以用CodingKeys映射名字

    struct Stuff: Codable, Equatable {
        let one, two, four: String
    
        private enum CodingKeys : String, CodingKey { case one = "1",  two = "2", four = "4"}
    }
    

    【讨论】:

    • 变量名也可以以下划线开头(挑剔)
    • @Sulthan 我指定了 规则 ?
    【解决方案2】:

    你不能。 RFC 7159 JSON 标准规定对象键必须是字符串。

    object = begin-object [ member *( value-separator member ) ]
               end-object
    
    member = string name-separator value
    

    【讨论】:

    • 是的,我明白了。但我无法更改外部 API:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    相关资源
    最近更新 更多