ios - Swift 4 将字符串解析为 json 对象
问题描述
我已经实现了二维码扫描器,在“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,但我发现了以下错误。
错误域 = NSCocoaErrorDomain 代码 = 3840 “字符 0 周围的值无效。” UserInfo={NSDebugDescription=字符 0 周围的值无效。}
任何人都可以对此有任何想法吗?
解决方案
最好像这样对 String 进行扩展
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()
或者你可以在 github https://github.com/utills/UtilityKit上使用 pod 来完成 UtilityKit 的所有这些工作
推荐阅读
- css - 堆栈导航栏和下一节
- ansible - 从 Ansible 中的 inventory_hostname 获取第 n 个主机
- google-sheets - 谷歌表格,当复选框选中时更改货币
- xamarin - SW=6985 读取电子护照(DG5,DG7)中间出错
- javascript - 在javascript中解析日期字符串数组
- python - 如何将相同的文档消除到 es 索引
- python - 在字典中搜索键并回答相应的值
- json - Java如何将JSON列表添加到类
- adaptive-cards - 无法使用 Node JS 呈现自适应卡片
- javascript - 如何在 HTML 中自动排列高度宽度媒体文件?