Swift 4解析字符串为JSON对象失败,求解决方法
解决JSON解析报错:Invalid value around character 0
这个问题我之前处理二维码扫描结果时也碰到过!根源在于你拿到的stringValue外层多了一对冗余的双引号,导致JSON解析器无法识别合法的JSON对象结构。
问题原因
你收到的stringValue内容是:
"{ "part_number":"154100102232", "lot_number":"03S32401701344"}"
注意开头和结尾的双引号——这整个内容并不是一个合法的JSON对象,而是一个包裹着JSON字符串的普通字符串。JSON解析器看到第一个字符是双引号,而非JSON对象的起始符{,就会抛出Invalid value around character 0的错误。
解决方案
我们需要先清理掉外层的冗余双引号(以及可能存在的首尾空白字符),再进行JSON解析。同时要避免强制解包!,防止意外崩溃。
修改后的代码如下:
// 1. 清理字符串:去掉首尾的双引号和多余空白字符 guard let cleanedString = stringValue.trimmingCharacters(in: CharacterSet(charactersIn: "\" ")) else { print("无法清理扫描到的字符串") return } // 2. 安全转换为Data(避免强制解包) guard let data = cleanedString.data(using: .utf8) else { print("字符串转Data失败") return } do { // 3. 解析JSON,建议用[String: Any]替代[AnyHashable:Any](JSON的key都是字符串) if let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] { print("Json:::", json) NotificationCenter.default.post(name: NSNotification.Name(rawValue: "SCANNER_DATA"), object: nil, userInfo: json) } else { print("解析后的内容不是合法的JSON对象") } } catch let error as NSError { print("JSON解析错误:\(error)") }
额外说明
trimmingCharacters(in:)方法只会移除字符串首尾的指定字符(这里是双引号和空格),不会影响JSON内部的引号。- 用
guard let替代强制解包!,能让代码更健壮,避免因字符串格式异常导致崩溃。
内容的提问来源于stack exchange,提问作者nadim
相关产品推荐
相关产品推荐

