Ios jsonObject(with:data)成功读取有效的json,但未返回有效的json
我正在使用以下代码处理一些问题:Ios jsonObject(with:data)成功读取有效的json,但未返回有效的json,ios,json,swift,validation,Ios,Json,Swift,Validation,我正在使用以下代码处理一些问题: let session = URLSession.shared session.dataTask(with: request) { data, response, error in if let data = data { let string1 = String(data: data, encoding: String.Encoding.utf8) ?? "Data could not be printe
let session = URLSession.shared
session.dataTask(with: request) { data, response, error in
if let data = data {
let string1 = String(data: data, encoding: String.Encoding.utf8) ?? "Data could not be printed"
print(string1)
do {
if let jsonData = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] {
print("success")
print(jsonData as AnyObject)
}
} catch {
print(error.localizedDescription)
}
}
}.resume()
当我打印出string1
时,它是有效的json,并且执行行print(“success”)
。但是,当它到达print(jsonData作为任何对象)
时,输出类似于json,但是有=
代替:
和()
代替[]
。除此之外,有些键甚至不是字符串。情况如下:
(
{ "build_path" = "<null>";
city = "<null>";
cm = "<null>";
country = "<null>";
}, {
//similar to above
}
)
(
{“构建路径”=“”;
城市=”;
cm=”“;
国家=”;
}, {
//同上
}
)
(这些值实际上当前为空)
我真的不知道为什么会发生这种情况,所以非常感谢您的帮助。谢谢。在
打印(jsonData as AnyObject)
中将作为任何对象删除。它将以您期望的格式打印。我查看了一些旧代码,因此请尝试使用以下行作为JSONSerialization部分:
if let jsonData = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]
我在以下情况下得到了正确的结果:
print(jsonData)
希望这能有所帮助。print(jsonData)
会产生相同的输出。p正在尝试解析一系列字典,而不是单个字典,否则将无法执行成功。顺便说一句,使用JSONSerialization.ReadingOptions.mutableContainers
是毫无意义的。添加'JSONSerialization.ReadingOptions'是多余的。顺便说一句,您甚至不需要传递options参数。OP的代码没有任何错误。但是如果让jsonData=try JSONSerialization.jsonObject(with:data)as,它可能会被缩短?[[String:Any]]{
好的,谢谢。这是旧代码,所以我没有真正检查它。我所知道的是它得到了我想要的东西。:)你的JSON对象是如何组合的。有没有缩进?它是一个单行字符串,还是“打印得很漂亮”对象?将JSONSerialization步骤分为两个:一个用于jsonObject,另一个用于将其转换到字典数组。根据结果,我可能建议您尝试可解码/可编码方法。如果您问我,它对字典数组更有效。这就是打印NSArray
的方式。您为什么期望>jsonObject(with:)
返回“valid json”?它根据解析的json中的顶级实体返回一个Cocoa对象。在本例中,它是一个数组;因此您得到一个NSArray
(然后将其桥接到Swift数组,然后将作为任何对象桥接回来)@murphguy这是一个单行字符串,我来看看可解码/可编码。