JSON 文本在 JSONSerialization Swift 中没有以数组错误开头
Posted
技术标签:
【中文标题】JSON 文本在 JSONSerialization Swift 中没有以数组错误开头【英文标题】:JSON text did not start with array error in JSONSerialization Swift 【发布时间】:2017-11-21 09:51:16 【问题描述】:执行以下请求时出现以下错误。
Error Domain=NSCocoaErrorDomain Code=3840 "JSON 文本没有开始 带有数组或对象以及允许未设置片段的选项。” UserInfo=NSDebugDescription=JSON 文本不是以数组开头或 允许未设置片段的对象和选项。
@IBAction func onPostTapped(_ sender: Any)
let parameters = ["Name": "Yogesh", "Mobile": "1212121212", "DOB": "1122/12/12", "Address": "qwqwqwqw"]
//https://jsonplaceholder.typicode.com/posts
guard let url = URL(string: "http://localhost/webservice/Register.php") else return
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else return
request.httpBody = httpBody
let session = URLSession.shared
session.dataTask(with: request) (data, response, error) in
if let response = response
print(response)
if let data = data
do
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
catch
print(error)
.resume()
什么可能导致这个问题?
【问题讨论】:
我猜错误是JSONSerialization.jsonObject()
的catch
?介意给我们看let dataStr = String(data: data, encoding:.utf8)
(并打印出来)?但是我猜dataStr
不是JSON Valid(网上有JSON Validator,查一下)。
> 200 SO 搜索结果为 “JSON 文本没有以数组或对象开头以及允许未设置片段的选项”,它们都没有帮助??
我尝试了那个解决方案,但我是新手,所以无法理解这个解决方案@martin。
【参考方案1】:
错误说明了问题,接收到的 JSON 不是以对象或数组开头,并且未设置 Allow Fragments。
检查您的 JSON 是否是您希望收到的内容
您可以像这样启用允许片段..
try JSONSerialization.jsonObject(with: data, options: .allowFragments)
允许片段允许您加载不直接映射到数组或字典的部分 JSON 数据
来自文档:
指定解析器应该允许***对象 NSArray 或 NSDictionary 的实例。
【讨论】:
以上是关于JSON 文本在 JSONSerialization Swift 中没有以数组错误开头的主要内容,如果未能解决你的问题,请参考以下文章