クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

JSON と YAML のデータ

このレッスンのあとで: JSON と YAML で書かれたデータを読み書きできる。

50分のレッスンコマンドなし

発注データの旅

コンビニの店長が、タブレットでお茶を10本発注しました。

その発注は、本部のシステム、物流センター、配送トラックのアプリへと順に渡ります。作った会社がそれぞれ違うプログラムです。

どのプログラムも読める、共通の書き方が必要です。よく使われるのが JSON と YAML です。

このレッスンのゴール

メモ

JSON と YAML で書かれたデータを読み書きできる。

キーワード

ことばいみれい
JSONプログラム同士でデータを渡すための文字の書き方
オブジェクトキーと値の組を波かっこで囲んだもの{"order_id": 5021}
キー値を取り出すための名前store
リスト順番に並んだ値を角かっこで囲んだもの["おにぎり", "お茶"]
入れ子データの中に別のデータがある形
YAML同じデータを字下げで書く形式

学生が入力するセルは、このプレビューでは空白です。

JSON はオブジェクトとリストでできている

オブジェクトは { } で囲みます。中には「キー: 値」の組を、カンマで区切って並べます。

リストは [ ] で囲みます。値が順番に並びます。

Python では json.loads で文字列を辞書に変え、キーで値を取り出します。

キーと変数の名前は英語にしています。多くの会社でそうするからです。値は日本語でかまいません。

発注データを読む

コード: python
import json

# 発注システムから届いたデータです。最初はただの文字列です。
text = '{"store": "梅田店", "order_id": 5021, "items": ["おにぎり", "お茶", "弁当"]}'

order = json.loads(text)  # 文字列が辞書になります
print(order["store"])
print(order["order_id"])
print(order["items"][0])

# やってみましょう: 二つ目の商品、お茶を表示してください。

入れ子のデータは一段ずつたどる

値が、別のオブジェクトやリストになることがあります。これを入れ子と言います。

奥の値を取り出すときは、一段ずつ進みます。キー、次のキー、そして番号の順です。

リストの番号は 0 から数えます。一つ目が 0、二つ目が 1 です。

表のデータ: {"order_id": 5021, "store": {"name": "梅田店", "city": "大阪市"}, "lines": [{"name": "お茶", "qty": 10}, {"name": "弁当", "qty": 4}]}

例: 入れ子の発注データ

書き方たどる順結果
order["order_id"]order_id5021
order["store"]["city"]店、その市大阪市
order["lines"][0]["name"]明細、一つ目、その商品名お茶
order["lines"][1]["qty"]明細、二つ目、その数量4
order["lines"][2]明細、三つ目エラー: 二つしかない

学生が入力するセルは、このプレビューでは空白です。

よくある誤解

注意

JSON でも Python と同じように一重引用符が使える、と思われがちです。JSON で使えるのは二重引用符だけです。{'id': 1} と書くと json.loads はエラーになります。JSON の文字列には必ず " を使いましょう。

発注を JSON にする

コード: python
import json

# 新しい発注を、Python の辞書で作ります。
order = {"store": "難波店", "order_id": 5022, "urgent": False}

# json.dumps で、別のプログラムに送れる文字列にします。
text = json.dumps(order, ensure_ascii=False)
print(text)

# やってみましょう: "note" というキーに "朝便で配送" を加えて、
# もう一度実行してください。

YAML は字下げで形を表す

YAML は、JSON と同じデータを、人が読みやすい形で書きます。だから設定ファイルによく使われます。

一行に キー: 値 を書きます。行の先頭の - は、リストの一つの値です。

入れ子は字下げ、つまり行の先頭の空白で表します。空白が一つずれると、意味が変わります。

設定ファイルを読む

コード: bash
# 配送サービスの設定ファイルを作ります。
cat > delivery.yaml <<'END'
service: delivery
port: 8080
debug: false
warehouses:
  - 大阪南港
  - 神戸
contact:
  name: 物流チーム
  phone: 06-0000-0000
END

cat delivery.yaml

# やってみましょう: grep で port の行だけを表示してください。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。