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这是一个单行字符串,我来看看可解码/可编码。