JSON-python

【jsonモジュール】PythonでJSONファイルに日本語を出力する方法 【Unicodeエスケープなし】

はじめに

Python組み込みの「json」モジュールで、JSONファイルに日本語をそのまま出力する方法を解説します。

jsonモジュールでは、日本語の文字列をJSONファイルに出力する際、「\u30e6」のようなUnicodeエスケープ(シーケンス)という形式で出力します。別プログラム・環境で読み込むには便利な形式ですが、人が読むには非常に見ずらい形式です。

そこで今回は、日本語の文字列をエスケープシーケンスなしで出力する方法について解説します。


環境

この記事は以下の環境で作成しています。

環境 バージョンなど
Python 3.9.6
OS Wiindows10

楽天ブックス
¥1,980 (2022/09/21 10:02時点 | 楽天市場調べ)

~トレンドを知るには雑誌が最適です~

実行結果

後述の「日本語のJSONファイルを出力するコード」の実行結果です。

「enseure_ascii = false」の指定の有無で、以下のようにUnicodeエスケープあり・なしの日本語が出力されます。

人が読めるかたちで日本語を出力する場合は、「ensure_ascii=False」を指定します。

ensure_ascii=False の指定あり

「Roles」の部分が、Unicodeエスケープの形式で表示されています。

{
  "Email": "taro@example.com",
  "Active": true,
  "CreatedDate": "2013-01-20T00:00:00Z",
  "Roles": [
    "\u30e6\u30fc\u30b6\u30fc",
    "\u7ba1\u7406\u8005"
  ]
}

ensure_ascii=False の指定あり

「Roles」の部分が、人が読める形で出力されています。

{
  "Email": "taro@example.com",
  "Active": true,
  "CreatedDate": "2013-01-20T00:00:00Z",
  "Roles": [
    "ユーザー",
    "管理者"
  ]
}

全体コード

「 日本語のJSONファイルを出力するコード 」の全体です。ポイント部分は後述の「コードのポイント」で詳しく解説します。

import json


# JSONファイルを作成するための辞書を作成します
# (Rolesの部分に日本語の文字列が含まれています)
dict = {}
dict["Email"] = "taro@example.com"
dict["Active"] = True
dict["CreatedDate"] = "2013-01-20T00:00:00Z"
dict["Roles"] = ["ユーザー", "管理者"]

# ensure_ascii "なし" で出力します
with open("output_uniEscape.json", "w", encoding="utf-8" ) as outputFile:
    json.dump(dict, outputFile, indent=2 )

# ensure_ascii "あり" で出力します
with open("output_jp.json", "w", encoding="utf-8") as outputFile:
    json.dump(dict, outputFile, indent=2, ensure_ascii=False )

コードのポイント

「ensure_ascii = false」 の指定で日本語がそのまま出力できる

JSONファイルを出力するdump関数に「ensure_ascii = False 」を指定することで、日本語の文字列をそのままファイルに出力できます。

# ensure_ascii "なし" で出力します
with open("output_uniEscape.json", "w", encoding="utf-8" ) as outputFile:
    json.dump(dict, outputFile, indent=2 )

# ensure_ascii "あり" で出力します
with open("output_jp.json", "w", encoding="utf-8") as outputFile:
    json.dump(dict, outputFile, indent=2, ensure_ascii=False )

出力結果 ensure_ascii = False あり

{
  "Email": "taro@example.com",
  "Active": true,
  "CreatedDate": "2013-01-20T00:00:00Z",
  "Roles": [
    "ユーザー",
    "管理者"
  ]
}

出力結果 ensure_ascii = False なし

{
  "Email": "taro@example.com",
  "Active": true,
  "CreatedDate": "2013-01-20T00:00:00Z",
  "Roles": [
    "\u30e6\u30fc\u30b6\u30fc",
    "\u7ba1\u7406\u8005"
  ]
}

【参考】JSONファイルの文字コードについて

pythonのコードはデフォルトで「utf-8」が設定されていますが、open関数を書き込みモードで使うと、デフォルトで「shift-jis」のファイルが作成されます。

VisualStudioCodeで、Pythonコードと一緒にJSONファイルを開くと今度は、「shift-jisに起因した文字化け」が起きて混乱するので、open関数には「encode=”utf-8″」の指定を入れることお勧めします。

まとめ

Python組み込みの「json」モジュールを使って、 JSONファイルに日本語をそのまま出力する方法を解説しました。 参考になればうれしいです。

UdemyでPythonのスキルに差をつける(無料あり)

Pythonのスキルを上げるには、Udemyの動画講座がおすすめです。

1講座 2440円程度で返金保証あり、無料講座も130本近く公開されています。アプリならオフラインで視聴できて、時間や場所にも縛られません。みんながやっていない今始めることで、スキルや評価に差をつけることができます。以下はPythonの無料講座の一覧です。

⇒ Pythonの講座一覧を見る

講座選びに迷ったらコレ

講座選びに迷ったら、以下がおすすめします。落ち着いた話し方とBGMで聴きやすく「ベストセラー」になっている講座です。

⇒ 現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル を見る

シリコンバレーの現役エンジニア酒井潤さんの講座です。基礎~応用まで盛りだくさんの講座です。シリコンバレー流の「動くだけでなく、他人も読めるコード」も一緒に学べます。

⇒ 独学で身につけるPython〜基礎編〜 を見る

京都大学・トヨタ自動車の経歴を持つ安井亮平さんの講座です。Pythonでの業務効率化方法がメインですが、Pythonの基礎から学べます。

jsonモジュールのその他の使い方

このブログではjsonモジュールの以下の内容も公開しています。興味のある方は是非以下の記事もご覧ください。

jsonモジュールでJSONファイルを読み込む方法

jsonモジュールでJSONファイル・JSON文字列を出力する方法

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

POSTED COMMENT

  1. etoh より:

    アノテーションツールの doccano でアノテーションしたファイルを export すると、文字化けした jsonlファイルが出力されます。
    そこで、jsonlファイルを正常な日本語で出力するにはどうすればいいのか調べていて、貴ページに辿り着きました。
    そこでご質問ですが、上記のコードはPython のどのファイルに書けばいいのでしょうか?
    何分初心者ですので、見当違いの質問をしているのかもしれませんが、どうぞよろしくお願いします。

    • えす より:

      etohさん
      ご質問ありがとうございます、えすです。

      doccanoは詳しくないのですが、
      tutorialを見た感じだと、doccano内のコードが文字化けのjsonlファイルを出力しているようなので、
      コードは「doccanoの中のjsonlを出力している部分」に書くことになります。

      ただ中々敷居が高い作業なので、
      自作のjsonl変換プログラムを作って、その中で文字化けを正しい日本語に変換する方が簡単かと思います。

      〇 イメージ
      doccano -> 「文字化けjsonl」 -> 自作python ->「文字化け修正jsonl」-> jsonlを使いたいプログラム

      ※ 「jsonlを使いたいプログラム」から、再度doccanoへ「Import」する場合は、
      「文字化けしたjsonl」に戻さないとdoccano側で正しく認識されない可能性があるので注意してください。

      検討違いな回答になっていたらすみません。
      分からない部分などあったら、追加のコメントで教えてください。

      参考になればうれしいです。

COMMENT

メールアドレスが公開されることはありません。