第6章 · 自動化とAI·v1.0.0·更新 2026/7/20·読了目安 約18分
変更要約: 初版
6.2JSONの構築とYANG
この節の要点
JSONを「有効か無効か」を判定できる水準で読み書きし(オブジェクト{}と配列[]の別・末尾カンマ不可・キーは二重引用符・値の型の区別)、その上でYANGがcontainer/list/leafでデータの型と構造を定義する言語であることを、モデル駆動運用の利点として理解します。
RESTCONFやコントローラAPIとやり取りする以上、送るペイロードが有効なJSONでなければ、機器に届く前にリクエストが弾かれます。この節で身につけるのは「JSONとは何か」という説明ではなく、目の前の断片を見て有効/無効を即断し、無効なら1文字単位で直せる力です。そしてJSONがデータの入れ物であるのに対し、YANGはそこに何が入るべきかを定めた型定義です。両者を「どちらもデータの話」と混ぜると、「JSONで型を強制できる」という誤解に落ちます——実際には型と構造の保証を担うのがYANGであり、その恩恵でベンダ横断の一貫した自動化が成り立ちます。
6.2.1有効なJSONの構成規則
- オブジェクトは波括弧
{}でキーと値の対を並べ、配列は角括弧[]で値を順に並べる。両者は入れ子にでき、{"interfaces": [{"name": "Gi1", "enabled": true}, {"name": "Gi2", "enabled": false}]}のように「オブジェクトの中に配列、配列の中にオブジェクト」が標準形になる。開いた括弧と閉じた括弧の種類と数が一致していなければ無効で、{を]で閉じるのはよくある破綻。 - キーは必ず二重引用符で囲む(
{"name": "Gi1"}は有効・{name: "Gi1"}は無効)。JavaScriptのオブジェクトリテラルや Python の辞書は引用符なしキーや単一引用符を許すが、JSONは単一引用符を一切認めない——{'name': 'Gi1'}は無効である。この差はPythonのdictをそのまま文字列化して送ったときに起こりやすく、json.dumps()を通す理由でもある。 - 最後の要素の後ろにカンマを置いてはならない(末尾カンマは無効)。
{"a": 1, "b": 2,}や[1, 2, 3,]は構文エラーで、パーサは文書全体を拒否する。行を追加/削除して編集したペイロードで最も起きやすい破綻であり、「エディタでは1文字の違いだが、APIから見れば文書全体が無効」という点が重要。 - 値の型は区別される:文字列は二重引用符付き(
"1500")、数値は引用符なし(1500)、真偽値は小文字のtrue/false、空値はnullである。True/False(Python流の大文字始まり)やNoneはJSONとしては無効で、"1500"と1500は別の型として扱われるため、数値を期待するフィールドに引用符付きで送ると型エラーで拒否されうる。

