gpt4 book ai didi

arrays - 如何将 Json 转换为二维数组?

转载 作者:行者123 更新时间:2023-11-28 10:37:34 24 4
gpt4 key购买 nike

如果我得到这样的 Json:

{ "i": [ "0", [123]] }

有什么可能的方法可以解码上面的二维数组吗?

class ModelA: Codable{
var i: [String]?
var temp: [Any] = []

enum CodingKeys: String, CodingKey {
case i = "i"
}

required init(from decoder: Decoder) throws {
let value = try decoder.container(keyedBy: CodingKeys.self)
temp = try value.decode([Any].self, forKey: .i)
}
}

用法:

public func printJsonData(){

let jsonData: Data = """
{
"i": [ "0", [123]]
}
""".data(using: .utf8)!

if let model = try? JSONDecoder().decode(ModelA.self, from: jsonData){
print(model.temp)
}else{
print("no data")
}
}

我已经尝试过数组 [Any] 在这里成功运行,但找不到任何在二维数组中转换的方法。如果有人知道如何解决这个问题,或者知道这在 Swift4.2 中是不可能的,请告诉我。谢谢!

最佳答案

如果您知道数组值的可能数据类型,也许您可​​以尝试使用枚举表示的可能值(在本例中为 String[Int])而不是 Any

例如:

enum ArrayIntOrString: Decodable {

case string(String)
case arrayOfInt([Int])

init(from decoder: Decoder) throws {

if let string = try? decoder.singleValueContainer().decode(String.self) {
self = .string(string)
return
}

if let arrayOfInt = try? decoder.singleValueContainer().decode([Int].self) {
self = .arrayOfInt(arrayOfInt)
return
}

throw ArrayIntOrStringError.arrayIntOrStringNotFound
}

enum ArrayIntOrStringError: Error {
case arrayIntOrStringNotFound
}
}

并在您的模型中声明它:

class ModelA: Decodable {

var i: [ArrayIntOrString]?

enum CodingKeys: String, CodingKey {
case i = "i"
}
}

用法

public func printJsonData() {

let jsonData: Data = """
{
"i": [ "0", [123]]
}
""".data(using: .utf8)!

do {
let model = try JSONDecoder().decode(ModelA.self, from: jsonData)
print(model.i)
} catch let err {
print("no data \(err)")
}


}

关于arrays - 如何将 Json 转换为二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52551533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com