ios - Json字符串转换
问题描述
我有一个 json 字符串。但我无法将其更改为 Dictionary String:Any 。谁能帮我?
这是我的代码
var str = "{\"01-2021\":\"[\"01 06 2021\",\"01 07 2021\",\"01 13 2021\",\"01 14 2021\",\"01 20 2021\",\"01 21 2021\",\"01 27 2021\",\"01 28 2021\"]\",\"02-2021\":\"[\"02 03 2021\",\"02 04 2021\",\"02 10 2021\",\"02 11 2021\",\"02 17 2021\",\"02 18 2021\",\"02 24 2021\",\"02 25 2021\"]\"}"
let data = string.data(using: .utf8)!
do {
if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .fragmentsAllowed) as? [String: Any]
{
print(jsonArray) // use the json here
} else {
print("bad json")
}
} catch let error as NSError {
print(error)
}
我总是收到这样的错误:Error Domain=NSCocoaErrorDomain Code=3840“字符 14 周围的对象格式错误。” UserInfo={NSDebugDescription=字符 14 周围的对象格式错误。}
解决方案
请阅读错误信息并检查字符 14 是什么?第一个冒号后的(转义)双引号是冒号前的(转义)双引号的结束双引号。这是无效的语法。您的 JSON 字符串是损坏的[String:String]
字典。
文字字符串语法使其更清晰
let str = """
{"01-2021":"["01 06 2021","01 07 2021","01 13 2021","01 14 2021","01 20 2021","01 21 2021","01 27 2021","01 28 2021"]","02-2021":"["02 03 2021","02 04 2021","02 10 2021","02 11 2021","02 17 2021","02 18 2021","02 24 2021","02 25 2021"]"}
"""
左方括号"["
是字符串文字,以下0
内容无效。
如果你想要[String:String]
它应该是
let str = """
{"01-2021":"[\\\"01 06 2021\\\",\\\"01 07 2021\\\",\\\"01 13 2021\\\",\\\"01 14 2021\\\",\\\"01 20 2021\\\",\\\"01 21 2021\\\",\\\"01 27 2021\\\",\\\"01 28 2021\\\"]","02-2021":"[\\\"02 03 2021\\\",\\\"02 04 2021\\\",\\\"02 10 2021\\\",\\\"02 11 2021\\\",\\\"02 17 2021\\\",\\\"02 18 2021\\\",\\\"02 24 2021\\\",\\\"02 25 2021\\\"]"}
"""
如果你想要[String:Any]
它实际上[String:[String]]
是
let str = """
{"01-2021":["01 06 2021","01 07 2021","01 13 2021","01 14 2021","01 20 2021","01 21 2021","01 27 2021","01 28 2021"],"02-2021":["02 03 2021","02 04 2021","02 10 2021","02 11 2021","02 17 2021","02 18 2021","02 24 2021","02 25 2021"]}
"""
在任何情况下,该选项.allowFragments
都是毫无意义的
编辑:修复腐烂的 JSON 替换
let data = string.data(using: .utf8)!
和
let data = Data(str.replacingOccurrences(of: "\"[", with: "[").replacingOccurrences(of: "]\"", with: "]").utf8)
或者
let data = Data(str.replacingOccurrences(of: #""["#, with: "[").replacingOccurrences(of: #"]""#, with: "]").utf8)
推荐阅读
- mysql - Mysql查询基于另一个表的行值
- jquery - GDPR - jQuery iframe 同意
- java - 将浮点值从一个 servlet 传递到另一个 servlet 时出现 servlet 问题
- javascript - 在命令之外使用 discord.js 模块
- c# - 可以在 Unity3D 中创建更高效的寻的导弹系统吗?
- c# - 如何通过 IEnumerable 返回数据
功能 - xml - 使用自定义功能区关闭并重新打开文档后,Word 会话功能区会发生什么情况?
- android - admob 广告类型是否存在收入不平等
- c# - Visual Studio C# 交换字符
- algorithm - 删除数组中的每个奇数索引,直到数组中的元素数变为 1