json - Swift:如何从 json 动态创建字典?
问题描述
我想听听你的一些建议。我想dictionary
从 API 的动态响应获取中创建一个并在Alamofire
POST 请求中发送该字典。
从我目前的情况来看,它正在工作,但我对我所做的并不满意,我认为代码真的很乱。
这是我可以收到的示例
"content": {
"type": "form",
"fields": [
{
"type": "select",
"label": "Do you have your documents?",
"field": "user.has_docs",
"default": 0,
"choices": [
{
"value": 0,
"name": "Not yet"
},
{
"value": 1,
"name": "I do"
}
]
},
{
"type": "input",
"field": "user.date",
"label": "When do you arrive?",
}
]
}
使用协议解析 json 后Codable
,我的所有数据都在模型中Field
- 类型:字符串
- 标签:字符串
- 字段:字符串
- 默认值:整数?
- 选择:【选择】?
Choice
- 值:整数
- 名称:字符串
所以我想创建我的字典,我想要以下方案:
{
"value": {
"user": {
"has_docs": 1,
"date": "29/07/2020"
}
}
}
名为 : "value" 的键始终是相同的值,但另一个取决于 API 的结果。“父对象”对应字段的前缀,右边是子对象。
在 Swift 中硬编码字典并不难,我会的
let dict = [
"value": [
"user": [
"has_docs": 1,
"date": "29/07/2020"
]
]
]
但是麻烦从尝试动态创建字典开始。user内部的值仅保留最后一个值,并将has_docs替换为date。
我找到了一种使用的解决方法flatmap
,reduce
但它只允许类型 [String: String],不幸的是我也需要在字典中写入 [String: Int]。
这是代码示例
let flattenedDictionary = [key : dictionaries
.flatMap { $0 }
.reduce([String:String]()) { (dict, tuple) in
var nextDict = dict
nextDict.updateValue(tuple.1 as! String, forKey: tuple.0)
return nextDict
}]
parameters["value"] = flattenedDictionary
这里:键=“用户”。字典 = [[“has_docs”:1],[“日期”:“2020 年 7 月 29 日”]]
如果您需要更多信息,请随时交换
如果您对如何帮助我有任何线索,我将不胜感激,感谢您到目前为止的阅读。
我希望我很容易理解。
编辑
从总体上看:我想动态创建字典
[String: [String: [String: Any]]]
解决方案
如果你有一个[String: [String: [String: Any]]]
或[String: [String: Any]]
字典有点不清楚,但动态创建它的概念会非常相似。
var user: [String: Any] = [:]
user["has_docs"] = 1
user["date"] = Date()
let dict = ["value": user]
推荐阅读
- python - 在 HTML 中嵌入 Plotly 生成的 div
- java - 从kotlin中的foreach获取值后如何返回
- api - KarateDSL UI 测试 - 浏览器自动关闭
- pandas - 如何获取列中非重复项的计数
- ruby-on-rails - 如何修复与 ENV 相关的 openweather api_key
- python - 如何在后台运行任务并在烧瓶中使用它的输出?
- r - 计算 R 表中特定行的一致性
- javascript - 将媒体放入 Node.js 上的 Kinesis Video Streams
- html - 使用 CSS 将列表显示为下拉列表
- android - 单个 ViewModel 中的多个 LiveData 对象