当前位置: 首页 > 面试题库 >

具有多维和多类型数组的Swift 4 JSON可解码

鲁单弓
2023-03-14
问题内容
{
"values":[
[1,1,7,"Azuan Child","Anak Azuan","12345","ACTIVE","Morning",7,12,"2017-11-09 19:45:00"],
[28,1,0,"Azuan Child2","Amran","123456","ACTIVE","Evening",1,29,"2017-11-09 19:45:00"]
]
}

好的,这是我从服务器收到的json格式

现在我想将其解码为我的结构,但仍然没有运气。

struct ChildrenTable: Decodable {
    var values: [[String]]?
}

我在URLSession上的调用方方法如下所示

URLSession.shared.dataTask(with: request) { (data, response, err) in
        guard let data = data else { return }

        let dataAsString = String(data: data, encoding: .utf8)
        print(dataAsString)

        do {
            let children  = try
                JSONDecoder().decode(ChildrenTable.self, from: data)
                print (children)
        } catch let jsonErr {
            print ("Error serializing json: ", jsonErr)
        }
    }.resume()

我得到的错误是

Error serializing json:  
typeMismatch(Swift.String, Swift.DecodingError.Context(codingPath: [Vito_Parent.ChildrenTable.(CodingKeys in _1B826CD7D9609504747BED0EC0B7D3B5).values, Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0)), 
Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0))], 
debugDescription: "Expected to decode String but found a number instead.", underlyingError: nil))

我知道数组中有一个整数,并且我只将String转换为值var values: [[String]]?(此错误弹出窗口的原因),但是我根本不能在结构中使用任何多维数组或元组,因为它遵循Decodable协议。

我也无法将数据转换为字典,因为它将引发错误“预期对字典进行解码,但找到了数组”

有解决这个问题的想法吗?我尝试在数据上强制转换字符串类型,但仍然没有运气…

p / s:如果所有json格式都是字符串类型,那不会有问题,但是由于我从API调用它,因此我没有更改权限。


问题答案:

如您所说,您的json数组是多类型的,但您尝试将所有内容解码为String。默认的一致性String,以Decodable不允许。我想到的唯一解决方案是引入新类型。

struct IntegerOrString: Decodable {
    var value: Any

    init(from decoder: Decoder) throws {
        if let int = try? Int(from: decoder) {
            value = int
            return
        }

        value = try String(from: decoder)
    }
}

struct ChildrenTable: Decodable {
    var values: [[IntegerOrString]]?
}

在线运行



 类似资料:
  • 问题内容: 使用,我可以比较和删除相似的项目,但是如果我有以下数组怎么办? 阵列1 数组2 我想过滤掉类似的物品;结果应该返回4.如何重新排列数组以便可以使用? 问题答案: 我可能会遍历原始数组并使它们成为一维的…类似

  • 假设我有5个不同的列,< code>a、b、c、d、e,我选择了多行: 例子: 用户有 3 个帖子,因此它将在查询中选择 3 行。 我想对< code>a的所有行的值求和(当然还有其余的)。 例如 值 = 4 值=10 < code >第3行 值= 1 所以我需要把所有这些加起来得到15。 我知道使用< code>array_sum($ratings)来查找数组的总和,但前提是您选择了一个可以有多

  • 问题内容: 我可以用来存储多种不同类型的数据(整数/字符串/等)?我来自PHP背景,可以将不同类型的数据存储到数组中,但是我不知道如何在Java中进行操作。 举个例子: 如何用Java做类似的事情? 问题答案: Java是一种强类型语言。在PHP或Javascript中,变量没有严格的类型。但是,在Java中,每个对象和基元都有严格的类型。您可以将多种类型的数据存储在Array中,但只能将其作为对

  • 问题内容: 我有一个索引元组数组,我想用它从多维numpy数组中选取值, 理解只有在已知的情况下才有效。 有什么提示吗? 问题答案: 您可以将的转置版本转换为元组,然后为矢量化解决方案建立索引-

  • 问题内容: 我只是有一个想法可以测试一些东西,并且有效: 输出显然是: 所以我的问题是: 这是好是坏的编码风格? 这有什么好处? 最重要的是,是否可以在声明本身中创建这样的构造? 另外…为什么甚至有可能做? 问题答案: 这是好是坏的编码风格? 像任何东西一样,这取决于情况。在某些情况下, 锯齿状数组 (称为它们)实际上是适当的。 这有什么好处? 好吧,用于将不同长度的数据集存储在一个数组中。例如,

  • 问题内容: 我过去经常检查数组中是否存在值,如下所示: 但是多维数组(下)如何处理-如何检查该值是否存在于多维数组中? 还是我不应该使用多维数组? 问题答案: 在多维数组上不起作用。您可以编写一个递归函数来为您做到这一点: 用法: