json - 使用嵌套属性构建平面 JSON
问题描述
到目前为止,我在所做的搜索中发现的所有问题都是关于将嵌套的 JSON 解码为具有嵌套属性的某些结构。我想做相反的事情:将平面JSON 解码为具有嵌套属性的结构。
下面是 JSON 示例:
{
"id":"ABC123",
"cell":"test",
"qty":24
}
我想解码成这个结构:
struct InventoryItem {
let id: String
let mfgInfo: MfgInfo
}
extension InventoryItem {
struct MfgInfo {
let cell: String
let qty: Int
}
}
我尝试为每个结构添加 CodingKeys:
struct InventoryItem: Decodable {
let id: String
let mfgInfo: MfgInfo
enum CodingKeys: String, CodingKey {
case id, mfgInfo
}
}
struct MfgInfo: Decodable {
let cell: String
let qty: Int
enum CodingKeys: String, CodingKey {
case cell, qty
}
}
但这不起作用。我收到此错误:
没有与键 CodingKeys(stringValue: \"mfgInfo\", intValue: nil) (\"mfgInfo\") 关联的值,转换为 mfg_info。
在没有自定义初始化程序的情况下如何使这项工作?还是我需要编写自定义init(with: Decoder)
初始化程序?
解决方案
这只能通过自定义init(with: Decoder)
实现实现,或者通过具有例如FlatInventoryItem
符合的类型,Decodable
然后提供该类型与所需InventoryItem
类型之间的转换方法。
推荐阅读
- ios - 等到 swift for loop 网络请求完成执行(不使用任何框架的原生)
- docker - Docker 端口问题绑定:无法分配请求的地址
- python - 通过两个表减去产品
- oracle - 当将用户输入从一个 jsp 传递到另一个 jsp 时,我在 executeQuery() 上遇到异常
- php - 生成 100000 个六位唯一字母数字代码
- java - 如何检测 Java 中的方法调用?
- julia - 可用作宏中的运算符的 ASCII 字符序列
- html - div的宽度和高度与屏幕宽度成正比
- angular - 使用 NGRX 刷新令牌拦截器
- java - java如何定义算术表达式的结果