我正在编写一个简单的完整堆栈应用程序,我从后端返回,在某些情况下,就像下面的字符串数组一样:
["one","two","three"]
我现在遇到的问题是这个返回不能像普通的JSON数据那样在swift中解析。我搜索但没有发现任何东西我想做的是:
let json = try JSONSerialization.jsonObject(with: data!, options: [.mutableContainers, .allowFragments]) as? [String]
不幸的是,这根本不起作用 我怎样才能像普通数组那样解析它?
提前致谢。
更新: 我在下面添加一些更相关的代码:
let task = URLSession.shared.dataTask(with: request as URLRequest){
data, response, error in {
do {
let json = try JSONSerialization.jsonObject(with: data!, options: [.mutableContainers, .allowFragments]) as? [String]
print(json)
}catch{
print(error)
}
}
datatask.resume()
我在控制台中收到的错误是“Error Domain = NSCocoaErrorDomain Code = 3840”字符0周围的值无效。“UserInfo = {NSDebugDescription =字符0周围的值无效。}”
谢谢你们所有人。
答案 0 :(得分:2)
如果您收到 3840错误,则JSON无效JSON,句点。
数组的JSON字符串应该是
let jsonString = "[\"one\",\"two\",\"three\"]"
Swift 4文字多行语法显示没有转义反斜杠的实际格式
let jsonString = """
["one","two","three"]
"""
您可以在没有任何选项的情况下解析它(没有.allowFragments ,没有.mutableContainers )
let data = Data(jsonString.utf8)
do {
let array = try JSONSerialization.jsonObject(with: data) as! [String]
print(array) // ["one", "two", "three"]
} catch {
print(error)
}
几乎每个人都误用JSONSerialization阅读选项
在99%的情况下,您可以省略options
参数
答案 1 :(得分:0)
您必须提供适当的JSON响应作为数据。之后,JSON序列化将正常工作。您的JSON响应应该是这样的:
{
"array": [
"one",
"two",
"three"
]
}
let json = try JSONSerialization.jsonObject(with: data!, options: [.mutableContainers, .allowFragments]) as? [String]
print(json)
在上面一行之后,您的数组响应会像这样 - http://jsoneditoronline.org/?id=eafd7ff34b45b2a380ebbe5959607906
更新####
您的响应从数组开始,它包含字典,请参阅下面的示例代码
let jsonString = """
[{"Name":"one"},{"Name":"two"},{"Name":"three"}]
"""
if let jsonData = jsonString.data(using: .utf8)
{
let json = try JSONSerialization.jsonObject(with: jsonData, options: [.mutableContainers, .allowFragments]) as? [[String:String]]
print(json)
}