使用 Swift 访问 JSON 数据



我有一个来自以下调用的JSON数据数组:

guard let json = (try? JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers)) as? [Any] else {
print("Not containing JSON")
return
}

当我运行 print(json( 时,我在输出中得到以下内容:

[{
"CREATED_BY" = "DOMAIN\USER";
"CREATED_DATE" = "2016-11-28T08:43:59";
STATUS = U;
"WIDGET_NUMBER" = K11;
"UPDATED_BY" = "<null>";
"UPDATED_DATE" = "<null>";
}, {
"CREATED_BY" = "DOMAIN\USER";
"CREATED_DATE" = "2016-05-09T08:46:23";
STATUS = U;
"WIDGET_NUMBER" = 89704;
"UPDATED_BY" = "<null>";
"UPDATED_DATE" = "<null>";
}]

我正在尝试获取 JSON 数据数组中的所有 WIDGETNUMBER 值。 json 变量是 Any 类型,到目前为止我无法转换为结构。 有没有一种简单的方法可以从 JSON 对象中获取元素?

看起来你有一系列字典

for item in json {
if let item = item as? [String: Any],  let widgetNo = item["WIDGET_NUMBER"] {
print(widgetNo)
}
}

你的内容是字典数组,所以你必须将每个元素字典转换为 Json

for dic in content {
do {
let jsonData = try JSONSerialization.data(withJSONObject: dic, options: .prettyPrinted)
print(jsonData)
} catch {
print(error.localizedDescription)
}
}

或者您可以直接从字典中读取WIDGET_NUMBER的值

for dic in content {
print(dic["WIDGET_NUMBER"] ?? "Not found")
}

Joakim的答案是获取小部件编号。对于您的结构,请务必添加类似这样的内容作为初始值设定项来映射您的对象。

let widgetNumber: Int
let user: String
init?(json:[String:Any]) {
guard let widgetNumber = json["WIDGET_NUMBER"] as? Int, 
let user = json["CREATED_BY"] as? String else { return nil }
self.widgetNumber = widgetNumber
self.user = user
}

如果你只想要一个小部件编号数组,你可以使用reduce函数,该函数迭代数组中的字典并提取小部件编号:

使用您的数据,我将其放在故事板中:

let json = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as! [[String: Any]]
let widgetNumbers = json?.reduce(into: [String]()){ (accum, dict) in
guard let widget = dict["WIDGET_NUMBER"] as? String else { return }
accum.append(widget)
}
widgetNumbers // -> ["K11", "89704"]

最新更新