在嵌套的字符串阵列上使用Swift解释



我试图解码一个字符串,其中返回的json是一系列字符串,但还包含嵌套数组

喜欢:

{ "people": ["Alice", "Bob"], 
"departments": [["Accounts", "Sales"]]
}

我的Swift代码:

let decoder = JSONDecoder()
let model = try decoder.decode([String:[String]].self, from: dataResponse)
print(model as Any)

我希望能够解码部门,但是每次我这样做时,都会抱怨:

错误Typemismatch(Swift.String,swift.decodingerror.context(编码路径:[_dictionaryCodingKey(StringValue:'&quot'部门" intvalue:nil),_JSONKEY(StringValue:'index 0" intvalue:0)],debugdescription:'期望解码字符串,但会找到一个数组。下林:nil))

我知道这是因为解码器期望带有一系列字符串的字符串

我想知道我是否也可以告诉它可以期待多个嵌套的字符串。

您只需要创建适当的结构并将其传递给解码器:

struct Root: Decodable {
    let people: [String]
    let departments: [[String]]
}

let decoder = JSONDecoder()
do {
    let model = try decoder.decode(Root.self, from: dataResponse)
     print(model.people)      // ["Alice", "Bob"]n"
     print(model.departments) // [["Accounts", "Sales"]]n"
} catch {
    print(error) 
}

如果您不想创建structs(例如,只需要一个数据),这是一种要考虑的方法。

let jsonData =  """
{ "people": ["Alice", "Bob"],
"departments": [["Accounts", "Sales"]],
"stores": [["Atlanta", "Denver"]]
}
""".data(using: .utf8)
if let jsonObject = try? JSONSerialization.jsonObject(with: jsonData!, options: []) as? [String: Any] {
    if let people = jsonObject["people"] as? [String] {
        print(people)
    }
    if let departments = jsonObject["departments"] as? [[String]] {
        print(departments)
    }
}

相关内容

  • 没有找到相关文章

最新更新