最近、Codable プロトコルに準拠するエンティティのエンコード中に問題に直面しました。
Playground のコードは次のとおりです。
class Person: Codable {
var name: String?
var age: Int?
var isDev: Bool?
}
let p1 = Person()
p1.name = "John N."
p1.age = 13
p1.isDev = false
let p2 = Person()
p2.name = "Jack"
p2.age = 19
p2.isDev = true
let people = [p1, p2]
let data = try JSONEncoder().encode(people)
let j = try! JSONSerialization.jsonObject(with: data, options: [])
print(j)
これは、Playground コンソールで取得している出力です。
ご覧のとおり、エンコードされた p1 名には引用符がありますが、p2 にはありません。だから私の質問はなぜですか?
PS私が気付いた唯一のことは、文字列値を設定するときにスペース記号やアンダースコアなどをどこかに追加すると、jsonに引用符が追加されることです。p1.name にはスペースが含まれているため、正しくエンコードされています。
どんな考えでも大歓迎です。