用語比較
json.load()とjson.loads()の違い|ファイルから読むか、文字列から読むか(Python3基礎)
json.load() は、ファイルのように .read() できるものから JSON を読み、Python のオブジェクトに戻します。json.loads() は、JSON が入った文字列そのものを Python のオブジェクトに戻します。名前の最後の s は string の s と覚えると、渡すものの違いが整理できます。
Python3エンジニア認定基礎試験は、主教材「Pythonチュートリアル 第4版」の基礎文法部分から出題され、第7章「入出力」のjsonモジュールによるデータの保存(json.dump()・json.load() など)も範囲です。チュートリアルは json.dumps() と json.load() を取り上げ、Python 公式のjsonモジュールの文書は、load() と loads() の引数の違いを説明しています。
このページは、読み込みの2つの関数のどちらを使うかを迷う人向けです。書き込み側のdump()とdumps()の違いは別ページに譲り、ここでは読み込み側の渡すものに絞ります。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
json.load(fp)
fp は .read() をサポートするテキストファイルまたはバイナリファイル。中の JSON を Python のオブジェクトに戻す。
json.loads(s)
s は JSON を含む str・bytes・bytearray のインスタンス。ファイルは使わない。
使い分け
ファイルを開いて読むなら load()、すでに文字列として手元にあるなら loads()。
違いを表で確認
| 比較軸 | json.load(fp) | json.loads(s) |
|---|---|---|
| 渡すもの | load():.read() をサポートするファイルのようなオブジェクト | loads():JSON ドキュメントを含む str・bytes・bytearray |
| ファイルの用意 | load():open() などで開いたファイルを渡す | loads():ファイルを開かず、文字列をそのまま渡す |
| 公式文書の例 | load(io):StringIO('["streaming API"]') を渡すと ['streaming API'] | loads('["foo", {"bar":["baz", null, 1.0, 2]}]') は ['foo', {'bar': ['baz', None, 1.0, 2]}] |
| 変換のしかた(共通点) | load():JSON から Python への変換表に従う(null は None) | loads():load() と同じ変換表に従う |
| 設問で目にする語(目安) | ファイルを開いて、f を渡して、読み込み用に | 文字列を受け取って、JSON 形式の文字列から、変数に入った JSON |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
ファイルに保存した設定やデータを読み込みたい人
open() で開いたファイルがあるなら json.load(f) です。チュートリアル7.2.2も、ファイルから読み込む形として json.load(f) を挙げています。
ファイルではなく、変数に入った JSON の文字列を扱いたい人
手元にあるのは文字列なので json.loads(s) を使います。ファイルを経由する必要はありません。
load() に文字列をそのまま渡してしまった人
load() の引数 fp は .read() をサポートするファイルのようなものです。文字列には .read() がないので、文字列を渡すときは loads() に切り替えます。
具体例で使い分ける
例 1
文字列から戻す例:loads()(公式文書の例)
import json のうえで、json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') を実行します。
- 渡しているのは JSON を含む文字列で、ファイルではありません。
- JSON の配列は Python のリスト、オブジェクトは辞書、null は None に変換されます。
- 結果は ['foo', {'bar': ['baz', None, 1.0, 2]}] です。
結論: 答えは ['foo', {'bar': ['baz', None, 1.0, 2]}] です。文字列が手元にあるので loads() を使います。
例 2
ファイルのような読み取り元から戻す例:load()(公式文書の例)
from io import StringIO のうえで、io = StringIO('["streaming API"]') を作り、json.load(io) を実行します。
- StringIO は、文字列をファイルのように読めるようにしたものです。.read() が使えます。
- load() は渡されたものの中の JSON を読み、Python のリストに戻します。
- 結果は ['streaming API'] です。
結論: 答えは ['streaming API'] です。ファイルのように読める相手を渡すので load() を使います。
問題文から答えを選ぶ手順
- 1
手元にあるものを確認する
開いたファイルなのか、JSON が入った文字列なのかを見ます。
- 2
ファイルなら load() にする
読み込み用に開いたファイルを json.load(f) の f に渡します。
- 3
文字列なら loads() にする
str・bytes・bytearray のどれかを json.loads(s) の s に渡します。
試験での見分け方
- 1ファイル(.read() をサポートするもの)から読むなら json.load()。
- 2JSON を含む str・bytes・bytearray から読むなら json.loads()。
- 3名前の最後の s は string の s と覚える。書き込み側の dumps() も同じ対応。
- 4JSON の null は Python の None に変換される。
誤答しやすい選択肢
文字列を json.load() に渡す
修正: load() が受け取るのは .read() をサポートするファイルのようなものです。文字列は loads() に渡します。
ファイルを json.loads() に渡す
修正: loads() が受け取るのは JSON を含む str・bytes・bytearray です。ファイルは load() に渡します。
辞書を dumps() して loads() すれば、必ず元の辞書に戻ると考える
修正: JSON のキーの型は常に str です。文字列以外のキーを含む x では、loads(dumps(x)) != x になると公式文書が注釈しています。
確認問題
Q1json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') の結果は何ですか?
答え: ['foo', {'bar': ['baz', None, 1.0, 2]}]
JSON の配列はリスト、オブジェクトは辞書、null は None に変換されます。公式文書の例と同じです。
Q2JSON を含む文字列を Python のオブジェクトに戻したいとき、load() と loads() のどちらを使いますか?
答え: loads()
loads() の引数 s は、JSON ドキュメントを含む str・bytes・bytearray のインスタンスです。
Q3json.load(fp) の fp に求められる条件は何ですか?
答え: .read() をサポートするテキストファイルまたはバイナリファイルであること
公式文書は、fp を .read() をサポートするテキストファイルまたはバイナリファイルと説明しています。
到達チェック
- load() はファイル、loads() は文字列を受け取ると説明できる
- loads() が受け取る型が str・bytes・bytearray だと言える
- JSON の null が Python の None になると言える
- 文字列以外のキーを含む辞書は loads(dumps(x)) で元に戻らないと説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- re.sub()とstr.replace()の違い|決まった文字列かパターンか(Python3基礎)
str.replace() は決まった文字列を別の文字列に置き換え、re.sub() は正規表現のパターンに合う部分を置き換えます。公式チュートリアルの『最小限の機能だけなら文字列メソッドがお勧め』という記述と計算例、確認問題つきで使い分けを整理します。
- round()と四捨五入の違い|0.5が0になる偶数への丸めとは(Python3基礎)
Python の round() は、二つの倍数が同じだけ近いとき偶数の方へ丸めます。round(0.5) は 0、round(1.5) は 2 です。Python 公式ドキュメントの記述と例、round(2.675, 2) が 2.67 になる理由、確認問題つきで学校で習う四捨五入との違いを整理します。
- random.choice()とsample()の違い|1個か重複なしの複数か(Python3基礎)
random.choice()は要素を1つ、random.sample()は重複なしで複数の要素をリストで返します。戻り値の型、空のシーケンスやkが大きすぎるときの例外、元のリストが変わらないことを、公式ドキュメントの記述と確認問題つきで整理します。
よくある質問
Qjson.load() と json.loads() の一番の違いは何ですか?
load() はファイルのように .read() できるものを、loads() は JSON を含む文字列を受け取ります。
Qloads() には bytes も渡せますか?
渡せます。Python 3.6 から str に加えて bytes と bytearray も使えます。入力のエンコーディングは UTF-8・UTF-16・UTF-32 のいずれかでなければなりません。
QJSON が正しくない文字列を渡すとどうなりますか?
脱直列化するデータが有効な JSON ドキュメントでない場合、JSONDecodeError が送出されると公式文書に書かれています。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
