Jac*_*obi 2 json nsjsonserialization swift
我正在使用以下代码。仅当 JSON 数据不以“[”字符开头时,它才有效。它适用于以“{”字符开头的 JSON 数据。这里有一个类似的问题:Parsing JSON array in swift但大多数方法已被弃用,我无法让代码工作。这是我正在使用的 JSON 调用:
guard let json = (try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)) as? [String: Any] else {
print("Error: Could not parse JSON!!!")
return
}
Run Code Online (Sandbox Code Playgroud)
我尝试删除所有选项并使用allowFragments 和 mutableLeaves 等。据我了解, mutableContainers 是默认设置,但我一直在尽我所能。任何帮助或建议将不胜感激。
以下是我正在使用的 JSON 数据的示例:
{ "CREATED_BY" = "域\用户"; "CREATED_DATE" = "2011-09-30T15:00:13"; 状态=U;“EMPLOYEE_NUMBER”= 039000292;"UPDATED_BY" = "域\用户""; "UPDATED_DATE" = "2014-08-02T13:22:01"; }
问题是 [] 表示 json 是一个对象数组,因此您需要将其转换为数组。您可以通过将其转换为 [Any] 或将其转换为字典数组(这就是它的真正含义)来完成此操作。
do {
let json = try JSONSerialization.jsonObject(with: data, options: []) as? [Any]
let json2 = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]]
} catch {
print("Error: Couldn't parse JSON. \(error.localizedDescription)")
}
Run Code Online (Sandbox Code Playgroud)
因此,向上述块提供以下 json:
let jsonString = """
[{
"id": "5",
"name": "Test",
"team1": "thingy team",
"team2": "clicky team",
"category": "4",
"end_date": "1415217600",
"cat_name": "new thingy",
"team1_bets": 1,
"team2_bets": 1
}]
"""
Run Code Online (Sandbox Code Playgroud)
你最终会得到以下输出:
let json = Optional([{
"cat_name" = "new thingy";
category = 4;
"end_date" = 1415217600;
id = 5;
name = Test;
team1 = "thingy team";
"team1_bets" = 1;
team2 = "clicky team";
"team2_bets" = 1;
}])
let json2 = Optional([["team2_bets": 1, "name": Test, "id": 5, "team1_bets": 1, "team2": clicky team, "team1": thingy team, "category": 4, "cat_name": new thingy, "end_date": 1415217600]])
Run Code Online (Sandbox Code Playgroud)
两者之间的主要区别在于,其内容json是对象数组Any,然后需要将其转换为您正在使用的任何数据类型。该json2数组是一个字典数组,然后您需要转换Any对象,但仍然拥有可用的键。
| 归档时间: |
|
| 查看次数: |
9058 次 |
| 最近记录: |