JSONとは?例で学ぶ、やさしい入門ガイド
JSON(JavaScript Object Notation)は、顧客、注文、商品のリストといった構造化されたデータを、名前と値の組として書き表すための、シンプルなテキスト形式です。人が読みやすく、プログラムが作成・解析しやすいのが特徴です。アプリやサービスがWeb上でデータをやりとりするとき、JSONが圧倒的にもっとも一般的な形式です。
AIでアプリを作るときにJSONが大切な理由
コードを書かなくても、JSONには日常的に出会います。
- API。 アプリの画面がバックエンドからデータを読み込むとき、あるいはバックエンドが決済、メール、AIのサービスを呼び出すとき、データはたいていJSONで送られます。APIとはを参照してください。
- 設定ファイル。 プロジェクトの設定ファイルの多くはJSONです。たとえば、JavaScriptプロジェクトの依存関係を一覧にした
package.jsonがそうです。 - データベース。 Postgresは、行と列にきれいに収まらないデータのために、列にJSONを保存できます(
jsonb型)。Postgresとはを参照してください。 - AIの出力。 AIモデルに、プログラムで使える形のもの(タグのリスト、請求書から抜き出した項目など)を返してもらいたいときは、たいていJSONを求めます。
- エラーメッセージとログ。 多くのエラーはJSONで届きます。何が起きたのかを最も早く突き止める手がかりになることが多いです。
JSONを読めると、アプリが実際に受け取ったものを確認でき、欠けているフィールドを見つけ、問題をAIビルダーに正確に伝えられます。
身近なたとえ
紙の申込書を思い浮かべてください。名前:、電話:、ニュースレター:☐ はい ☐ いいえ。 どの記入欄も、項目名とその横の値の組になっています。JSONは、その申込書を、コンピューターが推測せずに読める厳密なレイアウトのテキストとして書いたものです。申込書と同じように、JSONにはセクションの中のセクション(住所の欄の中に、番地、市区町村、郵便番号がある)や、リスト(複数の電話番号)も含められます。
JSONの見た目
以下は、1件の予約をJSONで表したものです。
{
"id": 5001,
"customer": "Lena Park",
"service": "Haircut",
"startsAt": "2026-10-03T14:00:00Z",
"price": 35.5,
"paid": false,
"notes": null,
"extras": ["beard trim", "hot towel"],
"contact": {
"email": "lena@example.com",
"phone": "+44 20 7946 0000"
}
}
読み方は次のとおりです。
- 波括弧
{ }はオブジェクト、つまり名前と値の組の集まりを囲みます。 - 各組は
"名前": 値の形で、カンマで区切られます。 - 角括弧
[ ]は配列、つまり順序のあるリストを囲みます。 contactやextrasのように、オブジェクトや配列は入れ子にできます。
値の6つの種類
JSONの値は6種類しかありません。この小ささが、どこでも使える理由のひとつです。
| 種類 | 例 | 補足 |
|---|---|---|
| 文字列(テキスト) | "Lena Park" | 必ずダブルクォートで囲む |
| 数値 | 35.5、-2、1e6 | クォートで囲まない。通貨記号は付けない |
| 真偽値 | true、false | 小文字で、クォートは付けない |
| null | null | 「値がない」を表す |
| オブジェクト | { "city": "Leeds" } | 名前付きの値 |
| 配列 | [1, 2, 3] | 順序のあるリスト。項目はどの種類の値でもよい |
日付の型はありません。日付は文字列として書かれ、上に示したISO 8601の形式(2026-10-03T14:00:00Z、ZはUTCを意味する)が一般的です。この形式を決めておくと、タイムゾーンのバグの一群を避けられます。
厳格なルール(エラーの原因)
JSONは見た目より融通がききません。次の例はすべて無効です。
{ name: "Lena" } ← ダブルクォートのないキー
{ 'name': 'Lena' } ← シングルクォート
{ "a": 1, "b": 2, } ← 末尾のカンマ
{ "a": 1 "b": 2 } ← カンマの抜け
{ "a": 1 // comment } ← コメントは使えない
見かける「Unexpected token」のエラーのほとんどは、これらのどれかです。JSONバリデーターやフォーマッターを使えば、問題の行を正確に示してくれます。
具体例:アプリの中でJSONが動く流れ
ある顧客がサロンアプリで散髪を予約します。ここでJSONが現れる場所は次のとおりです。
- 予約フォームが、次の内容をアプリのバックエンドに送ります。
{ "service": "Haircut", "startsAt": "2026-10-03T14:00:00Z", "name": "Lena Park" }
- バックエンドが予約をデータベースに保存し、ステータス
201 Createdと次の内容を返します。
{ "id": 5001, "status": "confirmed" }
- もし時間がすでに埋まっていた場合は、代わりにステータス
409 Conflictと次の内容を返すかもしれません。
{ "error": "slot_taken", "message": "That time was just booked. Please pick another." }
ページはstatusまたはerrorを読み取って、適切なメッセージを表示します。もしページが空白のままだった場合は、ブラウザの開発者ツール(Networkタブ)を開けば、このJSONが見えます。何が問題だったかを知る最も早い手がかりになることが多いです。
主な用語
| 用語 | 意味 |
|---|---|
| キー | "email"のような、名前と値の組の名前。 |
| パース | JSONのテキストを、プログラムが使えるデータに変換すること。 |
| シリアライズ / stringify | データを、送信や保存のためのJSONテキストに変換すること。 |
| ペイロード | リクエストやレスポンスで送られるデータ。 |
| スキーマ | データがどのような形であるべきか(どのフィールドがあり、どの型か)の定義。JSON Schemaは、その書き方の標準です。 |
| JSONB | Postgresのバイナリ形式のJSON列の型。インデックスを張ったり検索したりできる。 |
| NDJSON / JSON Lines | 1行に1つのJSONオブジェクトを置く形式。ログやストリーミングでよく使われる。 |
よくある誤解
- 「JSONはJavaScriptだ」。 構文はJavaScriptから来ていますが、言語に依存しません。Python、Java、C#、Goなど、ほかのすべての言語がJSONを読めます。
- 「数値をクォートで囲んでも問題ない」。
"35"は数値ではなく文字列です。両者を混ぜると、"35" + "5"が"355"になるようなバグが起きます。お金は、整数のセント(3550)で保存するほうが、丸め誤差を避けられることが多いです。 - 「データだけなのでJSONは安全」。 JSONには何でも入れられ、秘密情報も含まれてしまいます。ブラウザに送られるJSONにAPIキーを入れてはいけません。
- 「すべてをJSON列に入れればよい」。 柔軟な付加情報には便利ですが、検索、絞り込み、結合の対象になるデータは、通常は適切な列に入れるべきです。
- 「AIは常に有効なJSONを返す」。 モデルは余分なテキストを付けたり、形式を崩したりすることがあります。多くのプロバイダーは構造化出力のモードを提供していますが、それでもコードは返ってきた内容を検証すべきです。
AIビルダーに頼むこと
- 「このエンドポイントが返すJSONの例を見せて」
- 「エラーは、
errorコードと人間が読めるmessageを含むJSONで返して」 - 「日付はUTCのISO 8601の文字列で保存し、画面に表示するときだけローカル時間に変換して」
- 「価格は整数のセントで保存して」
- 「受け取ったJSONはサーバー側で検証し、必須フィールドが欠けている、または型が違うリクエストは拒否して」
- 「AIモデルを呼び出すときは、このとおりの形のJSONを要求し、使う前に確認して」
MythexでのJSON
MythexでJSONを手で書く必要はありません。やりたいことを説明すると、エージェントが送受信するコードを書いてくれます。ただ、JSONだと見分けられると役立ちます。何かが壊れたときに、JSONのエラーをチャットに貼り付ければ、エージェントに正確な手がかりを渡せます。ドキュメントのREST APIバックエンドのレシピは、最初から「わかりやすいJSONエラー」を求めています。外部サービスの呼び出しについては、任意のAPIを連携するのレシピが扱っています。全体像については、RESTとGraphQLの比較とAIで作ったアプリのデバッグ方法を参照してください。
よくある質問
JSONをかんたんに言うと何ですか?
JSON(JavaScript Object Notation)は、構造化されたデータを「"name": "Lena"」のような名前と値の組として書き表す、プレーンテキストの形式です。ほとんどのWeb APIがデータのやりとりにJSONを使い、多くのアプリが設定や保存データにも使っています。
JSONはプログラミング言語ですか?
いいえ。JSONはデータの形式であり、言語ではありません。単独では何もできず、データを記述するだけです。JavaScriptの文法から生まれましたが、ほぼすべてのプログラミング言語がJSONを読み書きできます。
JSONとJavaScriptのオブジェクトの違いは何ですか?
見た目は似ていますが、JSONのほうが厳格です。JSONではすべてのキーをダブルクォートで囲む必要があり、文字列もダブルクォートを使います。コメントや末尾のカンマは使えず、値は文字列、数値、true、false、null、オブジェクト、配列に限られます。
JSONが無効だと言われるのはなぜですか?
よくある原因は、最後の項目の後ろの末尾のカンマ、ダブルクォートではなくシングルクォート、項目の間のカンマ抜け、閉じられていない括弧、コメントです。JSONバリデーターに貼り付ければ、問題の行を教えてくれます。