ios - 如何在 Swift 中将键值对分解为 JSON 字符串?
问题描述
给定一个键值对,例如“abcd”=“e”,我怎样才能得到下面的 JSON 字符串:
{
"a": {
"b": {
"c": {
"d": "e"
}
}
}
}
解决方案
您可以构建字典层次结构,然后将其转换为 JSON 字符串。
给定一个
- 由点 (
.
) 分隔的路径元素列表组成的键 - 和一个值,
您可以按如下方式构建您的字典对象:
var jsonObject: [String: Any]
var path = key.split(separator: ".").map { String($0) }
let lastKey = path.popLast()!
jsonObject = [lastKey: value]
for element in path.reversed() {
jsonObject = [element: jsonObject]
}
然后你可以得到一个漂亮的打印版本(如上面的例子),如下所示:
let jsonData = try! JSONSerialization.data(withJSONObject: jsonObject, options: [.prettyPrinted])
let encoded = String(data: jsonData, encoding: .utf8)!
要获得紧凑(非漂亮)版本,请省略该.prettyPrinted
选项(但保留数组括号)。
let jsonData = try! JSONSerialization.data(withJSONObject: jsonObject, options: [])
let encoded = String(data: jsonData, encoding: .utf8)!
这是打包成一个函数的全部内容:
func jsonFromKeyValue(key: String, value: String) -> String {
var jsonObject: [String: Any]
var path = key.split(separator: ".").map { String($0) }
let lastKey = path.popLast()!
jsonObject = [lastKey: value]
for element in path.reversed() {
jsonObject = [element: jsonObject]
}
let jsonData = try! JSONSerialization.data(withJSONObject: jsonObject, options: [.prettyPrinted])
let encoded = String(data: jsonData, encoding: .utf8)!
return encoded
}
试试看:
let jsonObject = jsonFromKeyValue(key: "a.b.c.d", value: "e")
print(jsonObject)
推荐阅读
- javascript - 如何在特定时间偏移处将动画 SVG 绘制到画布上?
- websocket - ESP8266 WebSocket 与 BlueHost
- javascript - useRef() Hook 的 DRY 问题
- c# - 从节点 js(部署在 aws 上)返回值到 unity
- c++14 - 编译器无法识别重载方法
- intellij-idea - 为什么我的 Intellij IDE 无法正常打开
- java - 为什么 Android 中会出现 Unparseable date 错误?
- node.js - 如何使用节点 js 在 tsv 文件中写入列?
- java - 自定义布局的Android ArrayAdapter问题
- spring - 无法使用 Spring Boot 将 EntityManager 配置为 Transactional