iOS Swift:“JSON文本不是以数组或对象开头,而是选项允许未设置片段。”

时间:2018-01-29 07:02:32

标签: json swift

当我在swift中将Json字符串转换为字典时,我遇到了问题:错误Domain = NSCocoaErrorDomain Code = 3840“JSON文本没有以数组或对象开头,并且选项允许未设置片段。” UserInfo = {NSDebugDescription = JSON文本不以数组或对象开头,并且选项允许未设置片段。}

我不知道要解决这个问题,请提出修复问题的想法。在这里,我给了我的代码我尝试了什么..

将Json字符串转换为字典的方法是

func convertToDictionary(from text: String) throws -> [String: String] {
    guard let data = text.data(using: .utf8) else { return [:] }
    let anyResult: Any = try JSONSerialization.jsonObject(with: data, options: [])
    return anyResult as? [String: String] ?? [:]
}

Json字符串是:"[{\"propertyId\":\"1\",\"inspectionTemplateId\":1118,\"value\":[{\"widgetControllerId\":141,\"value\":\"Flood Summary Name\"},{\"widgetControllerId\":142,\"value\":\"Did the property flood?\"},{\"widgetControllerId\":143,\"value\":\"no\"}]}]"

方法的用法是:

let jsonString = NSString(data: responseObject as! Data, encoding: String.Encoding.utf8.rawValue)!
        print(jsonString)
        do {
            let dictionary:NSDictionary = try self.convertToDictionary(from: jsonString as String) as NSDictionary
            print(dictionary)
        } catch {
            print(error)
        }

3 个答案:

答案 0 :(得分:8)

阅读错误先生。错误是“不允许设置片段”。 只需设置.allowFragments。 而已。 (确保响应没有格式错误)

JSONSerialization.jsonObject(with: data!, options: .allowFragments)

答案 1 :(得分:3)

你可以试试这个:

let str = "[{\"propertyId\":\"1\",\"inspectionTemplateId\":1118,\"value\":[{\"widgetControllerId\":141,\"value\":\"Flood Summary Name\"},{\"widgetControllerId\":142,\"value\":\"Did the property flood?\"},{\"widgetControllerId\":143,\"value\":\"no\"}]}]".utf8
let json = try! JSONSerialization.jsonObject(with: Data(str), options: [])
print(json)

答案 2 :(得分:0)

如果服务器配置错误或服务器无法访问,也会出现这种类型的问题。如果您从JSON反序列化收到此类错误,则可以尝试将数据转换为字符串并打印出来。它可能会显示并显示诸如“ 502 Bad Gateway”之类的错误