Swift 4 将字符串解析为 json 对象
Posted
技术标签:
【中文标题】Swift 4 将字符串解析为 json 对象【英文标题】:Swift 4 parse string to json object 【发布时间】:2018-05-28 09:07:44 【问题描述】:我已经实现了二维码扫描器,在“metadataOutput”委托方法中,我收到了具有“stringValue”之类键的响应,该键的值是
stringValue "' "part_number":"154100102232", "lot_number":"03S32401701344"'"
我想将字符串值解析为 json 对象,但我做不到。
let data = stringValue.data(using: .utf8)!
do
if let json = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [AnyHashable:Any]
print("Json:::",json)
// post a notification
// NotificationCenter.default.post(name: NSNotification.Name(rawValue: "SCANNER_DATA"), object: nil, userInfo: json)
else
print("bad json")
catch let error as NSError
print(error)
我已经按照上面的方法将字符串解析为json,但是我发现了以下错误。
Error Domain=NSCocoaErrorDomain Code=3840 "周围的值无效 字符 0。” UserInfo=NSDebugDescription=无效值 字符 0.
有人对此有任何想法吗?
【问题讨论】:
您的字符串中似乎有一些无效字符。请后端开发人员以有效格式提供并使用jsonObject(with: data, options: [])
。
询问你的后端服务是否给你jsonString
【参考方案1】:
最好有这样的字符串扩展
extension String
func toDictionary() -> NSDictionary
let blankDict : NSDictionary = [:]
if let data = self.data(using: .utf8)
do
return try JSONSerialization.jsonObject(with: data, options: []) as! NSDictionary
catch
print(error.localizedDescription)
return blankDict
这样使用
let dict = stringValue.toDcitionary()
或者您可以使用 pod 来完成来自 github https://github.com/utills/UtilityKit 上的 UtilityKit 的所有这些类型的工作
【讨论】:
很好的解决方案。 强烈建议您不要使用建议 Foundation 类型NSArray/NSDictionary
而不是 Swift 本机类型的库。您正在与强类型系统作斗争。【参考方案2】:
这对我有用,你的字符串在尾随 "'
内容 '"
周围有 '
字符
let stringValue = """
"part_number":"154100102232","lot_number":"03S32401701344"
"""
let data = stringValue.data(using: .utf8)!
do
if let json = try JSONSerialization.jsonObject(with: data) as? [String:Any]
print("ewtyewytyetwytewytewtewytew",json)
else
print("ewtyewytyetwytewytewtewytew","bad json")
catch let error as NSError
print("ewtyewytyetwytewytewtewytew",error)
【讨论】:
感谢您的回复,是的,如果我使用了两个“,那么您是对的,那么它可以正常工作,但不幸的是我有“关注”。结果它没有用。无论如何我找到了解决方案。如果它以“'”开头,我已经检查了字符串的第一个和最后一个字符,然后将其删除然后解析。以上是关于Swift 4 将字符串解析为 json 对象的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4 Codable:将 JSON 返回字符串转换为 Int/Date/Float
JSON .count 数组在 Swift 4 中总是返回 0
如何将 alamofire 返回 json 解析为 Swift 中的字符串数组?