import Foundation
enum Foo: String, Encodable {
case asc
case desc
}
let foobar: [Foo: String] = [.desc: "testing"]
let encoder = JSONEncoder()
let data = try encoder.encode(foobar)
print(String(data: data, encoding: .utf8)!)
// Prints: ["desc","testing"]
This is a simplified example that demonstrates an issue I have been encountering in a project I'm working on. When the key of a dictionary is an enum, the JSONEncoder encodes it as an array and not as a dictionary.
I am able to reproduce this on both swift 5.3 and 5.2.4
Thanks @Lantua! Good to know why it's happening although it is a frustrating limitation. Since the enum has a string rawValue I can just transform the keys to strings prior to encoding.