注意:这个问题现在完全没有问题,因为事实证明,我想实现的目标实际上是可以使用我的原始方法实现的。实际上,只是我发送了导致问题的空参数集。尽管如此,也许某个地方的人可能会发现建议使用的其他方法之一有用,所以我将其留在这里。
我一直在使用以下代码片段将JSON转换为完全适合大括号内的JSON的原始字符串:
AF.request("https://blahblah.com", method: .get, parameters: [:], encoding:JSONEncoding.default, headers: headers)
.responseJSON { response in
guard let data = response.data else { return }
let json = try? JSON(data:data)
if let jsonAsString = json?.rawString(){
self.consoleWindow.stringValue += jsonAsString
}
}
当JSON用大括号括起来时,这很好用:
{
"blah1": true,
"blah2": "ABCDEF",
"blah3": "12345"
}
但是,我现在收到的JSON括在方括号中,如下所示:(编辑:不一定总是3个元素,需要作为一般解决方案)
[
{
"blah1": true,
"blah2": "ABCDEF",
"blah3": "12345"
}
]
使用原始方法时,我只会得到一个空字符串。
我是JSON和SwiftyJSON的新手,所以我不确定方括号如何更改JSON的结构。像我对大括号括起来的JSON一样,如何将方括号JSON作为原始字符串输出?
编辑:对于某些情况,我正在尝试创建类似控制台窗口之类的东西,该窗口将输出具有任何数量的元素的任何格式的JSON。
答案 0 :(得分:0)
如果只想获取服务器响应的字符串表示形式,请执行以下操作:
By default, Nova will place newly generated filters in the app/Nova/Filters directory
如果您需要将接收到的数据解析为模型对象,我建议为此使用swift的内置AF.request("https://blahblah.com", method: .get, parameters: [:], encoding:JSONEncoding.default, headers: headers)
.responseJSON { response in
guard
let data = response.data,
let string = String(bytes: data, encoding: .utf8)
else {
return
}
self.consoleWindow.stringValue += string
}
}
而不是SwiftyJSON。
Codable
最后,我还建议您考虑为什么需要Alamofire。恕我直言,使用URLSession / URLSessionDataTask并没有那么复杂,并且拥有更少的第三者依赖关系总是很有利的。