DESIGN / CODE / INFRA / AI

解説

falseと文字のfalseは同じ?AIのJSONを読む前に真偽値の型を確かめよう

JSONのfalseと"false"をPythonで読み比べる基礎。空でない文字列が真になる理由と、勝手に変換せず型を検査する小さな手順。

falseと文字のfalseは同じ?AIのJSONを読む前に真偽値の型を確かめよう
保存リストを見る →
この記事の道しるべ 5項目

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

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。