レッスン 10
パース: テキストからプログラムの値へ
パーサーがメモリ上の構造を構築する仕組みと、コード実行前に失敗しうること。
パースは、JSON テキストをプログラムが使える値 — メモリ上のオブジェクト、配列、文字列、数値 — に変換するステップです。すべての言語がこのステップ用のライブラリまたは組み込み機能を提供しています。API 名は異なっても考え方は同じです。
パースが生成するもの
入力テキスト:
{"id": 7, "tags": ["api", "draft"]}
パース成功後、ランタイムはインデックス可能な構造を保持します: id は数値、tags は文字列のリスト。パースが完了するまで、テキストは単なる文字列 — データとして扱うのは危険です。
典型的な失敗モード
| 問題 | 症状 |
|---|---|
| 構文エラー | パーサーが例外を投げるか、行/列付きエラーを返す |
| 無効な UTF-8 | JSON ルール適用前にデコードエラー |
| 巨大な入力 | パーサーのメモリまたは時間制限 |
| 重複キー | 多くのパーサーで最後の値が勝つ — 静かなデータ損失 |
パースは構文のみを検証します。ビジネス上の意味(誤った ID、欠落フィールド)の保証はしません — スキーマチェックかアプリケーションロジックが必要です。
パース vs 検証 vs 変換
- パース — これは有効な JSON テキストか?
- 検証(任意) — スキーマや必須フィールドに合致するか?
- 変換 — ドメイン型(日付、小数、列挙)へマッピング
本番パイプラインではこれらの段階を分離し、エラーを分類しやすくしましょう。
セキュリティ上の注意
JSON テキストをコードとして評価しない(eval 禁止)。専用パーサーを使いましょう。信頼できない入力には、ライブラリが許す範囲でサイズと深さに上限を設けてください。
パースを理解すると、1 つの余分なカンマが下流すべてを止める理由 — そして構文修正が常に最初である理由 — が明確になります。