解説
falseと文字のfalseは同じ?AIのJSONを読む前に真偽値の型を確かめよう
JSONのfalseと"false"をPythonで読み比べる基礎。空でない文字列が真になる理由と、勝手に変換せず型を検査する小さな手順。

AIに「有効か無効かをJSONで返して」と頼んだら、falseと書かれていた。でも、そのデータをプログラムへ渡すと有効の側へ進んでしまった。引用符の有無を見てみよう。
このページでは、JSONのfalseと文字列の"false"を見分け、Pythonで型を確認できるようになるよ。準備するのはPython 3を動かせる環境だけ。架空の設定を画面に表示する練習で、実際のサービスや公開設定は変更しない。
JSONには、文字と真偽値が別にある
JSONは、項目名と値などを一定の書き方で表すデータ形式。真偽値は「はい・いいえ」の二択を表す種類で、JSONではtrueとfalseを引用符なしで書く。一方、引用符で囲むと文字列になる。
{"enabled": false}
{"enabled": "false"}
enabledは、この練習で「有効か」を表す項目名。上は偽という値、下はf・a・l・s・eという文字だよ。人が読んだ意味は似ていても、プログラムが受け取る種類は違う。
Pythonで読み、型と判定を並べる
新しい練習用ファイルへ次を貼り、Python 3で実行してみよう。json.loadsはJSONの文字列をPythonの値へ読み取る関数、typeは値の種類を調べる関数だよ。
import json
samples = ['{"enabled": false}', '{"enabled": "false"}']
for raw in samples:
value = json.loads(raw)["enabled"]
print(repr(value), type(value).__name__, bool(value))
期待する表示は次の二行。
False bool False
'false' str True
PythonではJSONのfalseがFalseという真偽値へ対応する。"false"の方はstrという文字列のまま。reprは、文字列の引用符なども含めて違いが分かる形で表示しているよ。
boolは、英単語の意味を読んでいない
bool(value)は、その値を条件式として判定する関数。文字列の場合、空の文字列は偽、空でない文字列は真になる。"false"にも文字が入っているのでTrueになるんだ。
これはJSONの読み込みに失敗したわけではない。二つのデータはどちらもJSONとしては読める。問題は、受け取りたい型と違う値を、真偽値への変換で隠してしまうことだよ。
| Pythonの値 | 種類 | boolでの判定 |
|---|---|---|
| False | 真偽値 | False |
| "false" | 文字列 | True |
| "" | 文字列 | False |
| 0 | 整数 | False |
この表はPythonのルール。別の言語やCSVの読み込み設定へ、そのまま当てはめないでね。
変換する前に、受け取る型を確認しよう
今回は「真偽値だけを受け付け、文字列や数値は修正が必要として止める」というルールにする。上のファイルに続けて書いてみよう。
def require_boolean(value):
if type(value) is not bool:
raise ValueError("enabledには真偽値が必要です")
return value
for raw in samples:
value = json.loads(raw)["enabled"]
try:
print("OK", require_boolean(value))
except ValueError:
print("NG: 真偽値ではありません")
期待する表示はOK Falseと、NG: 真偽値ではありません。Falseをエラー扱いしているのではなく、文字列の方だけを拒否しているんだ。数値0も今回のルールでは受け付けない。
この関数は値の型だけを調べる小さな例。項目があるか、JSONが読めるか、ほかの項目を許すかは別の確認になる。JSONの構文・型・必要項目を分ける記事で、もう一段広い検査を扱っているよ。
AIへ頼む文と、違ったときの戻し方
依頼例は「enabledの値はJSONの真偽値trueまたはfalse。文字列の"true"・"false"や数値は使わない。判断できないときは推測で有効にせず、必要な確認を別途伝える」。これは依頼の例で、今回AIを実行した回答ではないよ。
型が違ったら、まず元のJSONを残し、提供側へ形式の修正を依頼しよう。すべてをboolへ通したり、文字の置換で引用符だけを消したりしない。文字列のtrue/falseも正式に受け付ける仕様なら、許可する綴りや空白・大文字の扱いを別に定義する必要があるね。
練習を最初へ戻すにはsamplesを掲載の二つへ戻して再実行する。既存の設定ファイルは触らないので、公開サービスへ影響しないよ。
編集部では2026年11月1日にPython公式資料を確認し、掲載コードとTrue・False・文字列・数値の型検査をPython 3.12.14で検証した。許可するラベルを先に決める記事も、受け取る値を決めるときの参考になるよ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。