Slide 1

Slide 1 text

kotlinx .serialization @takuji31 J Lang Fest Kansai Online #1

Slide 2

Slide 2 text

ࣗݾ঺հ • @takuji31 • Takuji Nishibayashi • Hatena Co., Ltd. • App Team • ίϛοΫDAYS • ΧΫϤϜ • δϟϯϓϧʔΩʔʂ

Slide 3

Slide 3 text

ࣗݾ঺հ • Android • Kotlin • (Flutter / iOS / Material Design etc.) • ! https://blog.takuji31.jp • " https://nazuna.takuji31.jp • # https://photo.takuji31.jp

Slide 4

Slide 4 text

ΞϓϦέʔγϣϯͰJSON΍YAML ΍XMLΛಡΜͩΓॻ͍ͨΓͯ͠·͢ ͔ʁ

Slide 5

Slide 5 text

AGENDA • kotlinx.serializationʹ͍ͭͯ • kotlinx.serializationͷ࢖͍ํ • ڝ߹ϥΠϒϥϦʔͱͷൺֱ

Slide 6

Slide 6 text

kotlinx. serializationʹ͍ͭͯ

Slide 7

Slide 7 text

Kotlin੡ͷγϦΞϥΠθʔγϣϯϥ ΠϒϥϦʔ

Slide 8

Slide 8 text

Kotlinެࣜ

Slide 9

Slide 9 text

ϚϧνϓϥοτϑΥʔϜରԠ

Slide 10

Slide 10 text

JSONҎ֎ʹ΋ෳ਺ͷϑΥʔϚοτ ʹରԠ

Slide 11

Slide 11 text

ϦϑϨΫγϣϯͳ͠

Slide 12

Slide 12 text

kaptෆཁ

Slide 13

Slide 13 text

Null SafetyରԠ

Slide 14

Slide 14 text

github.com/Kotlin/ kotlinx.serialization

Slide 15

Slide 15 text

kotlinx. serializationͷ࢖͍ํ

Slide 16

Slide 16 text

ηοτΞοϓखॱ

Slide 17

Slide 17 text

plugins { kotlin("multiplatform") // or kotlin("jvm") or kotlin("android") etc. kotlin("plugin.serialization") version "1.4.10" // Kotlin version } kotlin { sourceSets { val commonMain by getting { dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.0-RC2") } } } }

Slide 18

Slide 18 text

or github.com/Kotlin/ kotlinx.serialization#setup

Slide 19

Slide 19 text

JSON

Slide 20

Slide 20 text

{ "id": 1, "title": "సੜͨ͠ΒKotlinͩͬͨ݅", "author": "@takuji31", "stories": [ { "id": 1001, "number": 1, "title": "ਆ༷ͷϛεͰϓϩάϥϛϯάݴޠʹసੜͨ͠" } ] }

Slide 21

Slide 21 text

Ϋϥεఆٛ

Slide 22

Slide 22 text

@Serializable data class Comic( val id: Long, val title: String, val author: String, val stories: List, ) @Serializable data class Story( val id: Long, val number: Int, val title: String, )

Slide 23

Slide 23 text

γϦΞϥΠζ

Slide 24

Slide 24 text

val comic = Comic( id = 1L, title = "సੜͨ͠ΒKotlinͩͬͨ", author = "@takuji31", stories = listOf( Story( id = 1001L, number = 1, title = "ਆ༷ͷϛεͰϓϩάϥϛϯάݴޠʹసੜͨ͠", ), ), ) Json.encodeToString(Comic.serializer(), comic)

Slide 25

Slide 25 text

val comic = Comic( id = 1L, title = "సੜͨ͠ΒKotlinͩͬͨ", author = "@takuji31", stories = listOf( Story( id = 1001L, number = 1, title = "ਆ༷ͷϛεͰϓϩάϥϛϯάݴޠʹసੜͨ͠", ), ), ) Json.encodeToString(comic)

Slide 26

Slide 26 text

{"id":1,"title":"సੜͨ͠ΒKotlinͩͬͨ","author":"@takuji31","stories":[{"id":1001,"number":1,"title":"ਆ༷ͷϛεͰϓϩάϥϛϯάݴޠʹసੜͨ͠"}]}

Slide 27

Slide 27 text

!

Slide 28

Slide 28 text

val comic = Comic( ... ) val format = Json { prettyPrint = true } format.encodeToString(comic)

Slide 29

Slide 29 text

{ "id": 1, "title": "సੜͨ͠ΒKotlinͩͬͨ", "author": "@takuji31", "stories": [ { "id": 1001, "number": 1, "title": "ਆ༷ͷϛεͰϓϩάϥϛϯάݴޠʹసੜͨ͠" } ] }

Slide 30

Slide 30 text

prettyPrintҎ֎ͷΦϓγϣϯ͸ docs/json.md#json-configuration

Slide 31

Slide 31 text

σγϦΞϥΠζ

Slide 32

Slide 32 text

val json = //get json val comic: Comic = Json.decodeFromString(json)

Slide 33

Slide 33 text

val format = Json { ignoreUnknownKeys = true } val json = //get json val comic: Comic = format.decodeFromString(json)

Slide 34

Slide 34 text

ڝ߹ϥΠϒϥϦʔ ͱͷൺֱ

Slide 35

Slide 35 text

ൺֱ͢ΔϥΠϒϥϦʔ • Gson • Jackson • Moshi

Slide 36

Slide 36 text

σγϦΞϥΠζ࣌ͷܗࣜ

Slide 37

Slide 37 text

ܗࣜ • ϦϑϨΫγϣϯ • kapt • GradleϓϥάΠϯ

Slide 38

Slide 38 text

֤ϥΠϒϥϦʔͷσγϦΞϥΠζܗࣜ ϥΠϒϥϦʔ ܗࣜ Gson ϦϑϨΫγϣϯ Jackson ϦϑϨΫγϣϯ Moshi ϦϑϨΫγϣϯ/kapt kotlinx.serialization GradleϓϥάΠϯ

Slide 39

Slide 39 text

KotlinͷNull SafetyରԠ

Slide 40

Slide 40 text

֤ϥΠϒϥϦʔͷNull SafetyରԠ ϥΠϒϥϦʔ ରԠ/ඇରԠ Gson ඇରԠ Jackson ରԠ(jackson-module-kotlin) 1 Moshi ରԠ kotlinx.serialization ରԠ 1 https://github.com/FasterXML/jackson-dataformats-text

Slide 41

Slide 41 text

JSONҎ֎ͷϑΥʔϚοτ΁ͷରԠ

Slide 42

Slide 42 text

֤ϥΠϒϥϦʔͷରԠϑΥʔϚοτ(Ұ෦) ϥΠϒϥϦʔ ରԠϑΥʔϚοτ Gson ͳ͠ Jackson YAML/CSV/XML/Properties/Protobuf 1 2 Moshi ͳ͠ kotlinx.serialization YAML/XML/Properties/Protobuf 3 3 https://github.com/Kotlin/kotlinx.serialization/blob/master/formats/README.md 2 https://github.com/FasterXML/jackson-dataformats-binary 1 https://github.com/FasterXML/jackson-dataformats-text

Slide 43

Slide 43 text

Kotlin Multiplatform Project(KMP/ KMM)ରԠ

Slide 44

Slide 44 text

֤ϥΠϒϥϦʔͷରԠϑΥʔϚοτ(Ұ෦) ϥΠϒϥϦʔ ରԠ/ඇରԠ Gson ඇରԠ Jackson ඇରԠ Moshi ඇରԠ kotlinx.serialization ରԠ

Slide 45

Slide 45 text

·ͱΊ

Slide 46

Slide 46 text

·ͱΊ • kotlinx.serialization͸KotlinެࣜγϦΞϥΠθʔγϣϯϥΠϒϥϦʔ • ηοτΞοϓͨ͠Β؆୯ʹ࢖͑Δ • GradleϓϥάΠϯʹΑΔίʔυੜ੒ͳͷͰ࣮ߦ࣌/Ϗϧυ࣌ͷύϑΥʔϚϯ ε͕ྑ͍ • JSONҎ֎ʹ΋ଟ਺ͷϑΥʔϚοτʹରԠ • ϚϧνϓϥοτϑΥʔϜରԠͰiOS΍αʔόʔαΠυͰ΋࢖͑Δ • ϚϧνϓϥοτϑΥʔϜରԠ͍ͯ͠ͳ͍ϑΥʔϚοτ΋͋ΔͷͰ஫ҙ

Slide 47

Slide 47 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠