JSONモードとは、生成AIの回答を有効なJSON形式で出力させるための機能です。
文章をそのまま表示するだけでなく、AIの回答をアプリやデータベース、業務システムなどで処理したい場合に役立ちます。
たとえば、「商品名」「価格」「カテゴリ」といった情報をAIに抽出してもらう場面を考えます。通常の文章より、JSONとして受け取るほうがプログラムで扱いやすくなります。
ただし、JSONモードには重要な注意点があります。JSONとして正しい形式になることと、希望した項目やデータ構造に正確に一致することは別です。
この記事では、OpenAI APIで使われるJSONモードを中心に解説します。基本的な意味や仕組み、使い方、Structured Outputsとの違いを初心者向けに紹介します。
JSONモードとは
JSONモードは、生成AIから返されるデータを有効なJSONとして受け取りやすくする機能です。
通常の生成AIは、人が読む自然な文章を返します。一方、システム開発では「説明文」よりも、決められた形式のデータが必要になることがあります。
そこでJSONモードを使うと、生成結果をプログラム側で解析しやすくできます。また、OpenAI APIでは2つのAPIで利用できます。対象はResponses APIとChat Completions APIです。
そもそもJSONとは
JSONは「JavaScript Object Notation」の略です。構造化されたデータをやり取りするための、軽量なテキスト形式です。
たとえば、人の情報をJSONで表すと次のようになります。
{ "name": "山田太郎", "age": 30, "job": "営業"}
「name」という項目に「山田太郎」、「age」に30といった形で、データの意味と値を対応させられます。
JSONでは、文字列や数値、真偽値などを表現できます。さらに、nullやオブジェクト、配列にも対応します。そのため、WebサービスやAPIで広く使われています。

「JSONで出力して」と頼むだけの場合との違い
生成AIに通常の会話で「JSON形式で回答してください」と頼んでも、JSONらしい回答を生成させることはできます。
しかし、これはプロンプトによる指示です。
一方、JSONモードではAPI側でJSON形式の出力を指定します。プロンプトでお願いする場合よりも、機械処理を前提とした出力を扱いやすくなります。
この記事でいう「JSONモード」は、OpenAI API上の機能を指します。ChatGPTの通常画面で「JSONで回答して」と指示することとは区別しましょう。
JSONモードの仕組み
JSONモードでは、APIリクエスト時に出力形式としてjson_objectを指定します。
すると、モデルは通常の自由な文章ではなく、有効なJSONとして扱える出力を生成するよう制約されます。
イメージすると、次の流れです。
- ユーザーがAIへ情報を入力する
- API側でJSONモードを指定する
- AIが内容を処理する
- JSON形式で結果を返す
- プログラムがJSONを読み取って次の処理へ渡す
たとえば、お問い合わせ文から「氏名」「会社名」「問い合わせ内容」を抽出できます。抽出した情報を別々の項目としてシステムへ登録する処理にも利用できます。
ただし、JSONモードが保証するのは基本的にJSONとして有効な形式であることです。「nameという項目を必ず文字列にする」といった具体的なスキーマへの一致までは保証しません。
JSONモードを使うメリット
JSONモードの主なメリットは、AIの出力を人が読むだけで終わらせず、別のプログラムへ渡しやすくなることです。
プログラムで処理しやすい
自然な文章は、人間にとって読みやすい形式です。一方、プログラムでは「どこが商品名で、どこが価格なのか」を判定する追加処理が必要になる場合があります。
そのため、JSONなら項目と値を分離でき、プログラムから必要なデータを取り出しやすくなります。
後工程を自動化しやすい
AIの出力をJSONとして受け取れれば、次のような処理へつなげやすくなります。
- データベースへの登録
- スプレッドシートへの転記
- 問い合わせ内容の分類
- 商品情報の抽出
- 別のAPIへのデータ送信
- Webアプリへの表示
つまり、JSONモードは生成AIと既存システムの橋渡しをするときに便利な機能です。

JSONモードの注意点
JSONモードは便利ですが、「JSONなら何でも正確になる」という意味ではありません。
特に次の3点を理解しておく必要があります。
決めた項目や型になるとは限らない
たとえば、次の形式が必要だとします。
{ "name": "山田太郎", "age": 30}
JSONモードを使っても、常にこの2項目だけになるとは限りません。
また、モデルが別のキーを追加したり、期待したデータ構造と異なる形を生成したりする可能性があります。
特定のJSON Schemaに厳密に合わせたい場合は、Structured Outputsの利用を検討する必要があります。 OpenAIも、対応している用途ではJSONモードよりStructured Outputsを推奨しています。
JSONを生成する指示も必要
OpenAI APIでJSONモードを利用するときは、設定だけでは不十分です。会話のメッセージ内でも、JSONを生成するよう明示的に指示する必要があります。
現在のOpenAI公式ドキュメントには、入力コンテキストに「JSON」などの文字列を含める必要があると記載されています。
そのため、JSONモードの設定だけを行い、JSONを出力する指示を適切に与えない使い方は避けましょう。
内容そのものの正しさは別問題
JSONモードが扱うのは主に出力形式です。
JSONとして正しく解析できても、その中に入っている情報まで必ず正しいとは限りません。
たとえば、
{ "price": 10000}
ただし、このJSONが形式として正しくても、「本当に価格が1万円なのか」は別途確認が必要です。
そのため、重要な情報を扱う場合は、JSONの構文チェックだけでなく、値そのものの検証も必要です。
JSONモードとStructured Outputsの違い
JSONモードとよく比較される機能が**Structured Outputs(構造化出力)**です。
大きな違いは、指定したスキーマへの一致を求められるかどうかです。
| 比較項目 | JSONモード | Structured Outputs |
|---|---|---|
| 有効なJSONを出力 | ○ | ○ |
| 指定スキーマへの一致 | 保証しない | 対応するスキーマで保証 |
| 主な用途 | JSONとして受け取れればよい処理 | 項目・構造を厳密に決めたい処理 |
| OpenAIの現在の推奨 | 基本的な選択肢 | 対応する用途ではこちらを推奨 |
たとえば「JSONなら項目名が多少変わっても問題ない」という用途なら、JSONモードでも対応できます。
一方、
nameは必須ageは数値- 余分な項目を入れない
といった構造を厳密に管理したい場合はStructured Outputsのほうが適しています。

JSONモードの使い方
OpenAI APIでは、利用するAPIによってJSONモードの指定場所が異なります。
Responses APIの場合
Responses APIでは、text.formatにjson_objectを指定します。
Pythonで考えると、基本的な形は次のようになります。
fromopenaiimportOpenAIclient=OpenAI()response=client.responses.create(model="対応モデル名",input=[ {"role": "user","content": "次の文章から氏名と職業を抽出し、JSONで返してください。" } ],text={"format": {"type": "json_object" } })
ここで重要なのは、json_objectを設定するだけでなく、入力メッセージでも「JSONで返してください」と明示している点です。
Chat Completions APIの場合
Chat Completions APIでは、response_formatを使います。
fromopenaiimportOpenAIclient=OpenAI()response=client.chat.completions.create(model="対応モデル名",messages=[ {"role": "system","content": "回答はJSON形式で出力してください。" }, {"role": "user","content": "商品名と価格を抽出してください。" } ],response_format={"type": "json_object" })
OpenAIの仕様や対応モデルは変更される可能性があります。実装時には、使用するモデルとAPIの最新情報を公式ドキュメントで確認してください。
どのような場面で使う?
JSONモードは、特に次のような用途と相性があります。
- 文章から決まった情報を抽出する
- AIの結果を別システムへ渡す
- AIを使ったWebアプリを開発する
- 大量データを一定の形式で処理する
- API同士を連携する
新しくシステムを設計する場合は、出力項目をどこまで固定するか検討しましょう。厳密に固定したい場合は、最初からStructured Outputsが適切なケースもあります。
JSONモードに関するよくある質問
JSONモードを使えば必ず同じ項目が返りますか?
いいえ。
JSONモードは有効なJSONの生成を目的とした機能であり、指定したJSON Schemaへの一致までは保証しません。
同じキーやデータ型を厳密に維持したい場合は、Structured Outputsなどを検討します。
JSONモードとJSON Schemaは同じものですか?
異なります。
JSONはデータを表現する形式です。一方のJSON Schemaは、データの構造や条件を定義するための仕組みです。
OpenAIのStructured Outputsでは、JSON Schemaを利用して出力構造を指定できます。
ChatGPTで「JSONで答えて」と指示するのもJSONモードですか?
この記事で扱っているOpenAI APIのJSONモードとは区別して考えたほうがよいでしょう。
通常のチャットで「JSONで回答してください」と入力するのは、プロンプトによる出力指定です。APIのJSONモードでは、リクエスト側でもjson_objectを設定します。
初心者でもJSONモードを使う必要がありますか?
生成AIと普通に会話するだけなら、必ずしも必要ありません。
AIの回答をプログラムで受け取りたい場合もあります。自動処理やシステム連携へつなげるなら、JSONモードやStructured Outputsの理解が役立ちます。
まとめ
JSONモードとは、生成AIの出力を有効なJSON形式として受け取りやすくする機能です。
自然な文章ではなく構造化されたデータとしてAIの回答を受け取れるため、アプリ開発やデータ抽出、業務自動化などで活用できます。
ただし、覚えておきたいのは次の違いです。
- JSONモード:有効なJSONを出力させる
- Structured Outputs:指定したJSON Schemaに沿った出力を求める
そのため、「JSONならよい」のか、「項目やデータ型まで固定する必要がある」のかによって使い分けることが大切です。現在のOpenAI公式ドキュメントでは、対応している場合はStructured Outputsを優先することが推奨されています。
出典・参考情報
- OpenAI「Structured model outputs」
- OpenAI Help Center「OpenAI API における Function Calling」
- RFC Editor「RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format」
