0Pricing
Learn Rust Coding · レッスン

JSONの操作

serde_json

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

serde_json クレート

serde_json は serde 用の JSON 形式実装です。Rust の値と JSON テキストを相互変換する関数を提供します。

  • テキストには to_string / from_str
  • 動的な JSON には Value

構造体を JSON 文字列に変換する

serde_json::to_string は、任意の Serialize 値を JSON 文字列にシリアライズします。

use serde::Serialize;

#[derive(Serialize)]
struct User { id: u32, name: String }

fn main() {
    let u = User { id: 1, name: "Alice".to_string() };
    let json = serde_json::to_string(&u).unwrap();
    println!("{}", json);
}

JSON 文字列を構造体に変換する

serde_json::from_str は JSON を型付きの値として解析し、形式が正しくない入力を処理できるように Result を返します。

use serde::Deserialize;

#[derive(Deserialize, Debug)]
struct User { id: u32, name: String }

fn main() {
    let data = r#"{"id":1,"name":"Alice"}"#;
    let u: User = serde_json::from_str(data).unwrap();
    println!("{:?}", u);
}

整形出力

人間が読みやすいインデント付き JSON を出力するには to_string_pretty を使います。設定ファイルやデバッグに便利です。

use serde::Serialize;

#[derive(Serialize)]
struct Cfg { debug: bool, level: u8 }

fn main() {
    let c = Cfg { debug: true, level: 3 };
    println!("{}", serde_json::to_string_pretty(&c).unwrap());
}

json! マクロ

json! マクロを使うと、構造体を定義せずに JSON をインラインで構築でき、Value が生成されます。

use serde_json::json;

fn main() {
    let v = json!({
        "name": "Alice",
        "roles": ["admin", "user"]
    });
    println!("{}", v);
}

Value 型

serde_json::Value は、null、bool、数値、文字列、配列、オブジェクトのいずれかの JSON ノードを表す列挙型です。形状が不明な場合に使います。

use serde_json::Value;

fn main() {
    let data = r#"{"name":"Bob","age":30}"#;
    let v: Value = serde_json::from_str(data).unwrap();
    println!("{}", v["name"]);
    println!("{}", v["age"]);
}

Value から安全に読み取る

インデックスアクセスは Value を返します。型付きデータを安全に読み取るには、Option を返す as_str や as_i64 などのアクセサメソッドを使います。

use serde_json::Value;

fn name_of(v: &Value) -> Option<&str> {
    v.get("name")?.as_str()
}

通常の Rust で JSON アクセスをモデル化する

キーで値を読み取り、存在しない場合に代替値を使う処理は、Value オブジェクトへの問い合わせ方と同じです。ここでは HashMap を使います。

use std::collections::HashMap;

fn main() {
    let mut obj: HashMap<&str, &str> = HashMap::new();
    obj.insert("name", "Alice");
    let name = obj.get("name").copied().unwrap_or("unknown");
    let city = obj.get("city").copied().unwrap_or("unknown");
    println!("name={} city={}", name, city);
}

バイト列とライター

パフォーマンスを重視する場合、to_vec はバイト列にシリアライズし、to_writer はファイルやソケットなどの任意の io::Write に直接ストリーム出力します。

use serde::Serialize;

#[derive(Serialize)]
struct Msg { text: String }

fn to_bytes(m: &Msg) -> Vec<u8> {
    serde_json::to_vec(m).unwrap()
}

解析エラーの処理

from_str は Result を返します。エラーを match して、パニックを起こす代わりにユーザーに役立つメッセージを表示しましょう。

use serde::Deserialize;

#[derive(Deserialize)]
struct User { id: u32 }

fn parse(s: &str) -> String {
    match serde_json::from_str::<User>(s) {
        Ok(u) => format!("id {}", u.id),
        Err(e) => format!("invalid JSON: {}", e),
    }
}

Value と構造体の相互変換

serde_json::from_value と to_value を使うと、型付き構造体と動的な Value を相互変換できます。

use serde::Deserialize;
use serde_json::json;

#[derive(Deserialize)]
struct User { name: String }

fn main() {
    let v = json!({"name": "Eve"});
    let u: User = serde_json::from_value(v).unwrap();
    println!("{}", u.name);
}

理解度チェック

JSON の操作についての理解度を確認しましょう。

まとめ

serde_json を使った JSON の扱いを学びました。

  • to_string / from_str で構造体と JSON テキストを相互変換します
  • to_string_pretty で読みやすく整形します
  • json! マクロと Value で動的な JSON を扱います
  • アクセサと Result を使って安全に読み取り、解析します

次は、フィールド属性によるシリアライズのカスタマイズです。

よくある質問

「JSONの操作」レッスンは無料ですか?

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

「JSONの操作」で何を学びますか?

serde_json ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn Rust Codingを始めるのに経験は必要ですか?

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

「JSONの操作」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. シリアライズとデシリアライズ
  2. JSONの操作
  3. カスタムシリアライゼーション
  4. その他の形式
← Learn Rust Codingに戻る