Swift JSONDecoder解码获取元素原始数据

问题描述 投票:0回答:0

像这样定义一个结构体A:

struct A: Codable {
    let value1: String
    let value2: String
}
let a: A = A(value1: "1", value2: "2")
let aData: Data = try! JSONEncoder().encode(a)
let aStr: String = String(data: aData, encoding: .utf8)!
print(aStr)

let jsonString = "{\"value2\":\"2\",\"value1\":\"1\"}"
let jsonData: Data = jsonString.data(using: .utf8)!
let a1 = try? JSONDecoder().decode(A.self, from: jsonData)
print(a1)

let arrayString = "[{\"value2\":\"2\",\"value1\":\"1\"}]"
let arrayData: Data = arrayString.data(using: .utf8)!
let aArray = try! JSONDecoder().decode([A].self, from: arrayData)
print(aArray)

现在给你一个字符串:arrayString

let arrayString = "[{"value2":"2","value1":"1"}]"

let arrayData: Data = arrayString.data(using: .utf8)!

没有

JSONDecoder
aArray
然后得到
aArray.first
,然后
JSONEncoder
aData

并且不要

replace
"["
"]"
""

如何直接从 Decoder 获取 aData?

struct B: Codable {
    let aData: Data
    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        // can I get aData from decoder or container directly?
        // I want to get it this way, is it possible?
    }
}

try? JSONDecoder().decode([B].self, from: arrayData)
or?
try? JSONDecoder().decode(B.self, from: arrayData)
or some way using Decoder?

谢谢!

swift decode jsondecoder
© www.soinside.com 2019 - 2024. All rights reserved.