LLMが出力したJSONや外部APIのレスポンスを、1回の呼び出しで構文・型・必須項目・余剰項目まで検証。 結果は日本語のエラー説明と、LLMにそのまま再送できる修正指示テキストで返します。
1. APIキーを取得します(無料枠 月100件):
無料APIキーの申込フォーム
(申込後、運営者が手動でキーを発行してお送りします)。
自分のPCで試す場合は、リポジトリの README の手順で python -m jsonvalidator.cli issue --label me を実行するとキーが表示されます(BASE_URL=http://localhost:8080)。
2. 次の cURL を実行します(YOUR_API_KEY を置き換え、BASE_URL は公開URL)。
curl -X POST "$BASE_URL/validate" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"json": "{\"name\": \"太郎\", \"age\": \"20\"}",
"schema": {
"type": "object",
"properties": {"name": {"type": "string"}, "age": {"type": "integer"}},
"required": ["name", "age"],
"additionalProperties": false
}
}'
レスポンス例:
{
"valid": false,
"error_count": 1,
"errors_truncated": false,
"errors": [
{
"code": "type",
"path": "$.age",
"message": "$.age の型が違います。整数である必要がありますが、文字列が渡されました。",
"fix": "$.age を整数の値に直してください。",
"position": null
}
],
"retry_prompt": "直前に出力されたJSONに問題がありました。次の点をすべて修正し、JSONだけを出力し直してください。\n1. [$.age] $.age を整数の値に直してください。",
"usage": {"used": 1, "limit": 100, "month": "2026-11"}
}
import requests
schema = {"type": "object",
"properties": {"name": {"type": "string"}, "age": {"type": "integer"}},
"required": ["name", "age"]}
llm_output = '{"name": "太郎", "age": "20"}' # LLM が返した文字列
res = requests.post(
f"{BASE_URL}/validate",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"json": llm_output, "schema": schema},
timeout=10,
)
data = res.json()
if not data["valid"]:
# LLM にそのまま再送できる修正指示
print(data["retry_prompt"])
認証: X-API-Key: <キー> または Authorization: Bearer <キー>
| 項目 | 型 | 説明 |
|---|---|---|
json | 文字列(必須) | 検証したいJSON文字列(LLMの出力そのまま) |
schema | オブジェクト(任意) | JSON Schema。省略すると構文のみ検証。外部 $ref は非対応 |
lang | "ja" | "en"(任意) | エラー文の言語。既定 "ja" |
レスポンスの主な項目: valid(合否)、errors[](code / path / message / fix / position)、
retry_prompt(不合格時のみ)、usage(今月の利用数)。エラーは最大50件まで返し、超過分は errors_truncated: true になります。
| コード | 意味 |
|---|---|
| 200 | 検証を実施(合否は valid を参照。JSONが不正でも 200) |
| 401 | APIキーが無効 |
| 413 | リクエストが大きすぎる(上限 100,000 バイト) |
| 422 | リクエスト形式または schema が不正(入れ子が深すぎる schema を含む。利用回数は消費しません)。PATTERN_LIMIT_EXCEEDED: pattern が長すぎる/多すぎる(1つ256文字・1スキーマ20個まで)。VALIDATION_TIMEOUT: 検証が制限時間(2秒)を超えて中断(pattern を単純にし、入れ子の繰り返しを避けてください) |
| 429 | 月間上限超過(quota_exceeded)、またはレート制限(rate_limited、Retry-After 付き。1キーあたり毎分60回) |
スキーマの pattern / patternProperties の評価には時間制限(2秒)と長さ制限(1つ256文字、1スキーマ20個まで)があります。超えた場合は日本語のエラーを返します。
code)json_syntax(構文)、type(型違い)、required(必須欠落)、additional_properties(余剰項目)、
enum、const、minimum/maximum 系、min_length/max_length、pattern、format、
min_items/max_items、unique_items、one_of_*/any_of/not ほか。
| プラン | 内容 |
|---|---|
| 無料 | 月100件 |
有料プランは準備中です。