AI資格ドリル
資格を選ぶ↓

用語比較

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冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

ファイルに保存した設定やデータを読み込みたい人

open() で開いたファイルがあるなら json.load(f) です。チュートリアル7.2.2も、ファイルから読み込む形として json.load(f) を挙げています。

02

ファイルではなく、変数に入った JSON の文字列を扱いたい人

手元にあるのは文字列なので json.loads(s) を使います。ファイルを経由する必要はありません。

03

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. 1

    手元にあるものを確認する

    開いたファイルなのか、JSON が入った文字列なのかを見ます。

  2. 2

    ファイルなら load() にする

    読み込み用に開いたファイルを json.load(f) の f に渡します。

  3. 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)) で元に戻らないと説明できる

同じ資格で次に知りたいこと

よくある質問

Qjson.load() と json.loads() の一番の違いは何ですか?

A

load() はファイルのように .read() できるものを、loads() は JSON を含む文字列を受け取ります。

Qloads() には bytes も渡せますか?

A

渡せます。Python 3.6 から str に加えて bytes と bytearray も使えます。入力のエンコーディングは UTF-8・UTF-16・UTF-32 のいずれかでなければなりません。

QJSON が正しくない文字列を渡すとどうなりますか?

A

脱直列化するデータが有効な JSON ドキュメントでない場合、JSONDecodeError が送出されると公式文書に書かれています。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)