- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想使用 JSONEncoder+Encodable 将对象编码成自定义结构。
struct Foo: Encodable {
var name: String?
var bars: [Bar]?
}
struct Bar: Encodable {
var name: String?
var value: String?
}
let bar1 = Bar(name: "bar1", value: "barvalue1")
let bar2 = Bar(name: "bar2", value: "barvalue2")
let foo = Foo(name: "foovalue", bars: [bar1, bar2])
foo
编码的默认方法给出:
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(foo)
print(String(data: data, encoding: .utf8)!)
输出:
{
"name": "foovalue",
"bars": [
{
"name": "bar1",
"value": "barvalue1"
},
{
"name": "bar2",
"value": "barvalue2"
}
]
}
在自定义输出中,我想使用属性 name
的值作为键,rest 的值作为上述键的值。这同样适用于嵌套对象。所以我希望输出是:
{
"foovalue": [
{
"bar1": "barvalue1"
},
{
"bar2": "barvalue2"
}
]
}
问题是 Encodable/JSONEncoder 是否支持这个。现在我只处理第一个输出字典并通过迭代键来重构它。
最佳答案
如果你想保留 Foo
和 Bar
Encodable
,你可以通过提供一个自定义的 encode(to :)
使用特定编码键,其值为 name
:
private struct StringKey: CodingKey {
let stringValue: String
var intValue: Int? { return nil }
init(_ string: String) { stringValue = string }
init?(stringValue: String) { self.init(stringValue) }
init?(intValue: Int) { return nil }
}
struct Foo: Encodable {
var name: String
var bars: [Bar]
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: StringKey.self)
try container.encode(bars, forKey: StringKey(name))
}
}
struct Bar : Encodable {
var name: String
var value: String
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: StringKey.self)
try container.encode(value, forKey: StringKey(name))
}
}
StringKey
可以接受任何 String
值,允许您根据需要任意编码。
关于swift - 使用 jSONEncoder 的自定义结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48718091/
您好,我有多个 JSON 数据包,就像我在下面写的那样。 { "data" : { "lng" : 36.159999999999997, "lat" : 50.359999999
我需要一些有关扩展标准的帮助json.JSONEncoder在Python中。 我有这样的对象: temp = { "a": "test/string", "b": {
有没有办法配置 JSONEncoder 在将 Double(整数)转换为 JSON 时添加尾随小数点和零? 下面的代码说明了这个问题。 import Foundation struct NumberT
我试图将结构数组保存到 UserDefaults 中,但我无法弄清楚为什么 JsonEncoder 会返回空数据。我有符合 Codable 协议(protocol)的设置模型 struct MenuI
我正在尝试通过重写 default 方法,使用另一种模式使用 json.JSONEncoder 对 JSON 进行编码: class X(json.JSONEncoder): def defa
我正在为具有可能关联值的 enum 类型实现 Codable。由于这些对于每种情况都是唯一的,我认为我可以在编码期间不使用 key 输出它们,然后在解码时简单地查看我能得到什么以恢复正确的情况。 这是
我正在运行 Python 2.7,我正在尝试创建 JSONEncoder 的自定义 FloatEncoder 子类。我遵循了许多示例,例如 this,但似乎都不起作用。这是我的 FloatEncode
与所有 IEEE 7540 系统一样,Swift 中的数字如 4.7被视为类似 4.7000000000000002 的值.所以这并不奇怪: % swift Welcome to Apple Swif
我想知道函数 jsonEncode()来自 dart:convert图书馆是完全可以预测的。也就是说,将jsonEncode()总是对 Map 的键和值进行编码对象以相同的顺序? 最佳答案 答案是:视
我尝试使用 JSONEncoder 将四个不同的数组编码为 json 格式,但无法转换数组。所以,请帮帮我。我在 iOS 11 上使用 swift 4、xcode 9。 我的数组是: var time
这个问题在这里已经有了答案: Swift String escaping when serializing to JSON using Codable (5 个答案) 已关闭 3 年前。
例如我只想将这个示例数组转换成一个 JSON 对象 var test = [String : Any] () test["title"] = "title" test["description"] =
如何将通用结构发送到返回 JSON 的函数? 我正在尝试创建一个函数,它获取一个结构作为参数并返回一个 JSON 数据。我之所以这样做是因为我想避免重复,它将在多个地方和不同的结构中使用(即:用户、客
我有一个包含多个方法和属性的父类: class Animal { var var1: ... var var2: ... func func1() {} func func2(
想使用 JSONEncoder+Encodable 将对象编码成自定义结构。 struct Foo: Encodable { var name: String? var bars: [Ba
我遇到了以下错误 我不知道为什么会出现这个问题,我该如何解决?请帮忙! 注意:我使用的是 Xcode 版本 9.3.1 和 Swift4,我曾尝试使用 JSONCodable.JSONEncoder
我正在实现我自己的 JSONEncoder 来完全按照我的需要处理不同的类。不幸的是,我的自定义编码器返回格式有点错误的字符串。它们被引号包围,某些字符(引号)被转义。 请使用以下代码重现该行为: i
我无法将 collections.namedtuple 转储为正确的 JSON。 首先,考虑 official使用自定义 JSON 序列化程序的示例: import json class Comple
我在 Python 2.7.10 中工作,我有一些二进制数据: binary_data = b'\x01\x03\x00\x00 \xe6\x10\x00\x00\x01\x00\x00\x00\x0
var test = [String : String] () test["title"] = "title" test["description"] = "description" let enco
我是一名优秀的程序员,十分优秀!