0Pricing
Kotlin Academy · レッスン

JSONのエンコードとデコード

JSONとの相互変換を学びます

「JSONのエンコードとデコード」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

Jsonオブジェクト

Json オブジェクトは、エンコードとデコードの中心です。デフォルトのインスタンスはそのまま使用でき、設定済みのインスタンスを構築することもできます。

import kotlinx.serialization.json.Json

val json = Json

文字列にエンコードする

encodeToString を使うと、オブジェクトをJSON文字列に変換できます。

import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

@Serializable
data class Book(val title: String, val pages: Int)

fun main() {
    val book = Book("Kotlin in Action", 360)
    val text = Json.encodeToString(book)
    println(text)
}

文字列からデコードする

decodeFromString を使うと、JSONをオブジェクトに戻せます。対象の型は推論されるか、明示的に指定します。

import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json

@Serializable
data class Book(val title: String, val pages: Int)

fun main() {
    val text = "{\"title\":\"Atomic Kotlin\",\"pages\":500}"
    val book = Json.decodeFromString<Book>(text)
    println(book.title)
}

リストをエンコードする

コレクションは自動的にエンコードされます。シリアライズ可能なオブジェクトのリストは、JSON配列になります。

import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

@Serializable
data class Tag(val name: String)

fun main() {
    val tags = listOf(Tag("kotlin"), Tag("json"))
    println(Json.encodeToString(tags))
}

整形出力

Json { } ビルダーを設定してインデント付きの出力を有効にすると、ログ出力やデバッグに役立ちます。

import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

@Serializable
data class Point(val x: Int, val y: Int)

val pretty = Json { prettyPrint = true }

fun main() {
    println(pretty.encodeToString(Point(1, 2)))
}

未知のキーを無視する

デフォルトでは、JSONにクラスに存在しないキーが含まれているとデコードに失敗します。ignoreUnknownKeys = true を設定すると、それらを無視できます。APIの進化に対応する際に便利です。

import kotlinx.serialization.json.Json

val lenient = Json { ignoreUnknownKeys = true }

デフォルト値をエンコードする

デフォルトでは、デフォルト値と等しいプロパティは書き込まれません。encodeDefaults = true を有効にすると、常に含められます。

import kotlinx.serialization.json.Json

val withDefaults = Json { encodeDefaults = true }

JsonElementを扱う

動的なJSONでは、型付きクラスの代わりに JsonElement ツリーへ解析できます。

import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement

fun main() {
    val element: JsonElement = Json.parseToJsonElement("{\"a\":1}")
    println(element)
}

JsonObjectのフィールドを読み取る

JsonElement を JsonObject にキャストし、キーでフィールドにアクセスしてからプリミティブに変換します。

import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.int

fun main() {
    val obj = Json.parseToJsonElement("{\"a\":1}").jsonObject
    val a = obj["a"]!!.jsonPrimitive.int
    println(a)
}

ラウンドトリップ

エンコードしてからデコードすると、等しいオブジェクトが戻るはずです(ラウンドトリップ)。モデルの妥当性を手軽に確認する方法です。

import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json

@Serializable
data class P(val x: Int)

fun main() {
    val original = P(42)
    val back = Json.decodeFromString<P>(Json.encodeToString(original))
    println(original == back)
}

よくあるデコードエラー

次の実行時例外に注意してください:

  • SerializationException: Unexpected JSON token — 不正なJSON
  • 必須フィールドがない — JSONにデフォルト値のないプロパティが含まれていない
  • 未知のキー — ignoreUnknownKeys で厳密性を無効にする

理解度チェック

APIによって新しいJSONフィールドが頻繁に追加されます。デコードが失敗しないようにする設定はどれですか?

まとめ

これでオブジェクトとJSONを相互に変換できるようになりました:

  • encodeToString / decodeFromString
  • Json { } で設定する:prettyPrint、ignoreUnknownKeys、encodeDefaults
  • JsonElement で動的なJSONを解析する

次は、サポートされていない型のためのカスタムシリアライザーです。

よくある質問

「JSONのエンコードとデコード」レッスンは無料ですか?

はい。「JSONのエンコードとデコード」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「JSONのエンコードとデコード」で何を学びますか?

JSONとの相互変換を学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「JSONのエンコードとデコード」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. kotlinx.serializationのセットアップ
  2. Serializableクラス
  3. JSONのエンコードとデコード
  4. カスタムシリアライザー
← Kotlin Academyに戻る