如何修复错误Domain = NSCocoaErrorDomain代码= 3840“字符52周围的值无效”。

时间:2019-03-29 07:38:24

标签: ios swift

如何转换此。 “ {\ n ID = \” d9a7c7bf-781d-47b3-bb4e-e1022ec4ce1b \“; \ n名称=总部; \ n}”;以此格式{                 “ ID”:“ d9a7c7bf-781d-47b3-bb4e-e1022ec4ce1b”,                 “名称”:“总部”             }

 if let jsonString = text as? String {
        let objectData = jsonString.data(using: String.Encoding.utf8)
        do {
            let json = try JSONSerialization.jsonObject(with: objectData!, options: .allowFragments) as! [String:Any] //try JSONSerialization.jsonObject(with: objectData!, options: JSONSerialization.ReadingOptions.mutableContainers)
            print(String(describing: json))
            return json
        } catch {
            // Handle error
            print(error)
        }
    }
  

Blockquote

2 个答案:

答案 0 :(得分:3)

首先并且已经提到过,字符串格式显然是不是 JSON。

这是调用Foundation集合类型(description / NSArray)的NSDictionary属性时返回的字符串格式。
例如,print语句调用description,并且该格式也出现在Terminal.app的输出中。

但是有一个解决方案:这种字符串格式称为openStep(一种OpenStep / NeXt旧式格式),并且可以在PropertyListSerialization中使用

此代码读取格式:

let string = "{\n ID = \"d9a7c7bf-781d-47b3-bb4e-e1022ec4ce1b\";\n Name = Headquarters;\n}"
let data = Data(string.utf8)

do {
    let dictionary = try PropertyListSerialization.propertyList(from: data, format: nil)
    print(dictionary)
} catch { print(error) }

注意:

我非常确定原始数据格式不是 not openStep,而在的某个地方不必要地使用问题中的String(describing初始化程序创建了字符串。

答案 1 :(得分:1)

您的json格式不正确。如果您使用functionReturningAPromise()进行尝试,它将引发以下错误:

error

因此,首先需要将jsonformatter替换为;。第二个是字符串应该用双引号引起来,将,替换为Name = Headquarters

这是正确的形式

Name = "Headquarters"