我正在使用以下代码。仅当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
}
我尝试删除所有选项,并使用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“;}
答案 0 :(得分:2)
问题在于[]表示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)")
}
因此在上述代码块中提供了以下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
}]
"""
您最终将获得以下输出:
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]])
两者之间的主要区别在于json
的内容是Any
对象的数组,然后需要将它们强制转换为您正在使用的任何数据类型。 json2
数组是一个字典数组,然后您需要强制转换Any
对象,但仍具有可用的键。
答案 1 :(得分:1)
那么它可能是一个数组
do {
let json = try JSONSerialization.jsonObject(with: data) as? [Any]
print(json)
}
catch {
print(error)
}
此[]表示数组----> [任何]
而此{}表示字典-----> [String:Any]