Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JSONEncodeで詰まった話
Search
とんとんぼ
June 04, 2023
Technology
0
180
JSONEncodeで詰まった話
JSONEncoderでnilをNullとしてエンコードした際に詰まった話と解決方法について解説しています。
とんとんぼ
June 04, 2023
Tweet
Share
More Decks by とんとんぼ
See All by とんとんぼ
Swift愛好会:What's new in Xcode16 要約
ktombow
0
550
今週のTopics:量子コンピュータ
ktombow
2
180
Flutter開発で便利だと感じた設定
ktombow
0
720
Other Decks in Technology
See All in Technology
実は強い 非ViTな画像認識モデル
tattaka
2
1.1k
Perlの生きのこり - エンジニアがこの先生きのこるためのカンファレンス2025
kfly8
2
260
Two Blades, One Journey: Engineering While Managing
ohbarye
4
1.4k
CDKのコードを書く環境を作りました with Amazon Q
nobuhitomorioka
1
160
開発組織を進化させる!AWSで実践するチームトポロジー
iwamot
1
150
AWSを活用したIoTにおけるセキュリティ対策のご紹介
kwskyk
0
310
Windows の新しい管理者保護モード
murachiakira
0
200
Raycast Favorites × Script Command で実現するお手軽情報チェック
smasato
1
140
ESXi で仮想化した ARM 環境で LLM を動作させてみるぞ
unnowataru
0
160
EMConf JP 2025 懇親会LT / EMConf JP 2025 social gathering
sugamasao
2
180
脳波を用いた嗜好マッチングシステム
hokkey621
0
280
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
110
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
44
14k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
570
Making Projects Easy
brettharned
116
6k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Why Our Code Smells
bkeepers
PRO
336
57k
Automating Front-end Workflow
addyosmani
1368
200k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Building Your Own Lightsaber
phodgson
104
6.2k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Site-Speed That Sticks
csswizardry
4
400
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Transcript
JSONEncoderで詰まった話 5月29日(火)Swift愛好会 とんとんぼ
自己紹介 • name: とんとんぼ • iOS & Android Dev •
23卒 新卒 • 最近、アイコンを変えました→ 旧アイコン 私が描きました
アジェンダ 1. 背景 2. 本論 3. 結論
ある日の出来事・・・
None
これ頼むわ
APIの内容 { "name" : "とんとんぼ", "age" : 24, "hobby" :
"Study Swift&Kotlin" } パラメータ名 型 必須 name String ⭕ age Int ❌ hobby String ❌ パラメータ リクエスト(例)
ageとhobbyがnilの場合 はどうすればええん?
Nullでリクエストして
None
None
None
None
None
None
None
理想 現実
ここまでが背景
ちなみに
None
None
なぜ、このようなことが起きるのか?
原因の考察 • nilをNullでエンコードするオプションは自分で書くことができるから、フレー ムワークとして用意する必要がない • Nullと欠落を同一視するAPIが多い(?) • ペイロードは小さい方が良い 参考文献:[SR-9232]Optionals with
nil value do not get encoded to JSON #3594
nilをNullでエンコードしたい
nilをNullにエンコードするには
道標 • JSONEncoderがキーを保持して、Nullをセットするように設定 • 自動生成されたものは使えない • encode(to:)の実装を書く必要がある
None
None
None
このままだと不便・・・
None
None
None
None
まとめ • SwiftではAPIにリクエストを投げる際に、Int?やString?型にnilを入れても情報が欠 落する • おそらく、Kotlinも同様? • Nullと欠落を同様に扱うAPIが多いから(?) • ペイロードは小さい方が良い
解決法: • encode(to:)やプロパティラッパーで、nilをNullにエンコードするよう実装する必要が ある
None