【发布时间】:2019-04-26 02:03:00
【问题描述】:
如何将此 JSON 响应与消息中的数百个键转换,以便能够将其分配给变量类型 [AnyHashable: Any]
JSON
{
"content": {
"message": {
"greet": "Hello world",
"error": "There is an error",
"thanks": "Thank you",
...
}
}
}
尝试
解析 JSON 后,我未能将 jsonData 分配给接受 [AnyHashable: Any] 的变量。我尝试将message 类型更改为[AnyHashable: Any],但它不符合Decodable。
// Model.swift
struct TestCase: Decodable {
let content: Content
}
struct Content: Decodable {
let message: [String: String]
}
// ViewController.swift
private var testVariable: [AnyHashable: Any]
private func loadJson(filename: String) {
if let url = Bundle.main.url(forResource: filename, withExtension: "json") {
do {
let data = try Data(contentsOf: url)
let decoder = JSONDecoder()
let jsonData = try decoder.decode(TestCase.self, from: data)
// Problem faced
testVariable = jsonData // error
} catch let jsonError {
print("JsonError: ", jsonError)
}
}
}
【问题讨论】:
-
显示您的实际代码。显示您尝试过的内容。显示您遇到的问题。
-
@samuelkith 您可以使用 JSONSerialization jsonObject(with: Data) 将您的 json 数据字符串转换为字典。
let dictionary = try JSONSerialization.jsonObject(with: Data(json.utf8)) as? [String: [String: [String: String]]] -
@Sh_Khan,它是我正在使用的具有该类型的库中的一个变量。 @LeoDabus,如果我想使用
Decodable会是什么样子 -
@Sh_Khan json 数据是一个 utf8 字符串。您不能将字符串转换为字典
-
testVariable = (try JSONSerialization.jsonObject(with: data)) as? [AnyHashable: Any] ?? [:]
标签: json swift dictionary