こんにちは。さすをです。
以前、6,000万のPython案件に携わりました。
今回の記事は、PythonでJSON形式のファイルを読み込んだ際にエラーがでた時の対処法を紹介していきます。
それでは本文をどうぞ。
PythonでJSONファイルを読み込もうとしたら、エラーが出た。
調べたけど全然わからないし、どうすればいいの、、
その悩みを解決します!
※0円のサンプルテキストという近道
独学よりプログラミングスクールの方が効果は出やすいですが、値段が高く、なかなか手を出しづらいですよね。techgymでは無料のサンプルテキストと解説動画をもらえるので、これを使ってお得にPythonの基礎を学ぶのもオススメです。
最短1分でできる!
- 1.JSON形式のファイル読み込み時によく発生するエラーの対処法6選
- 1-1.ValueError: Expecting property name: line x column y (char z)
- 1-2.json.decoder.JSONDecodeError:Extra data:line 2 column 1(char 1)
- 1-3.json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
- 1-4.Expecting value:line 1 column 1 (char 0)
- 1-5.UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0x83 in position 14:illegal multibyte sequence
- 1-6.KeyError: ‘age’
- 2.一人で学習するのに不安を感じたら
- 3.まとめ
1.JSON形式のファイル読み込み時によく発生するエラーの対処法6選
JSON形式のファイル読み込み時によく発生するエラーは以下のようなものがあります。
- ValueError: Expecting property name: line x column y (char z)
- json.decoder.JSONDecodeError:Extra data:line 2 column 1(char 1)
- json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
- Expecting value:line 1 column 1 (char 0)
- UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0x83 in position 14:illegal multibyte sequence
- KeyError: ‘age’
1-1.ValueError: Expecting property name: line x column y (char z)
「ValueError: Expecting property name: line x column y (char z)」は、JSONファイルの書式に誤りがあるときに発生するエラーです。
カンマ(,)が余分に入っていないか、中括弧({})の数は正しいかなど、改めて確認しましょう。
1-2.json.decoder.JSONDecodeError:Extra data:line 2 column 1(char 1)
「json.decoder.JSONDecodeError:Extra data:line 2 column 1(char 1)」は、改行で区切られているJSON形式のファイル(JSON Linesファイル)を読み込む際に発生するエラーです。
改行で区切られているJSONの例:
{ "name": "satoshi", "age": 40, "color": "blue", "hobby": "fishing" }
{ "name": "sho", "age": 38, "color": "red", "hobby": "rap" }
{ "name": "jun", "age": 37, "color": "purple", "hobby": "smoothie" }
{ "name": "masaki", "age": 38, "color": "green", "hobby": "animal" }
{ "name": "kazunari", "age": 37, "color": "yellow", "hobby": "game" }
このようなJSONを読み込みたい場合は、pandasライブラリを使用すると簡単に読み込むことができます。
詳しい内容は、【徹底解説】pandasでJSON形式のファイルを読み込む方法で解説しているので、こちらからご覧ください。
1-3.json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
「json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes」は、変数名がダブルクォーテーション(“)で囲まれていないというエラーです。
つまり、変数名をダブルクォーテーション(“)で囲めばエラーは解消されます。
JSONは、JavaScriptなどとは違い、シングルクォーテーション(‘)や変数名のみの記述だとエラーを吐きます。
JSONを扱う時は変数名をダブルクォーテーション(“)で囲むということを覚えておきましょう。
1-4.Expecting value:line 1 column 1 (char 0)
「Expecting value:line 1 column 1 (char 0)」は、JSONの書式に誤りがある場合、XMLやHTML出力(<で始まる文字列)されている場合、互換性のないエンコードがされている場合に発生するエラーです。
JSONの書式に誤りがないか
「<」で始まる文字列はないか
エンコードは互換性があるか
改めて確認しましょう。
1-5.UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0x83 in position 14:illegal multibyte sequence
「UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0x83 in position 14:illegal multibyte sequence」は、適切なエンコーディングが設定されていない場合に発生するエラーです。
上記のエラー文の場合、JSONファイルに日本語が含まれており、適切なエンコーディングがされていないと考えられます。
ですので、ファイルを読み込むときに、エンコーディングを指定してあげればエラーを解消することができます。
json_file = open('blog_data/sample.json',encoding='utf-8')
JSONファイルに日本語が含まれているときは、特に注意しましょう。
1-6.KeyError: ‘age’
「KeyError: ‘age’」は、存在しないキーを取得しようとしているときに発生するエラーです。
上記のエラー文の場合、ageというキーがないのでエラーが発生しています。
スクリプトの例はこんな感じ。
sample.json:
{
"color": {
"satoshi": "brue"
},
"hobby": {
"satoshi": "fishing"
}
}
pythonスクリプト:
import json
json_file = open('blog_data/sample.json', 'r')
json_dict = json.load(json_file)
get_data = json_dict["age"]
print(get_data)
ageという存在しないキーを取得しようとしているのでエラーが発生します。
KeyErrorが出た場合は、キーが存在するか確認しましょう。
2.一人で学習するのに不安を感じたら
成長している感覚を得られなかったり、エラーばかりで思うように進まない人は、一度プロに教わることをおすすめします。
初期費用は掛かってしまいますが、地図のない状態でひたすら駆け回るよりも、プロという地図を利用したほうが、短い時間で確実に成長することができますし、Pythonスキルを習得したら、初期費用は1か月で回収できます。
本気で人生を変えたい人は検討してみてください。
3.まとめ
6,000万のPython案件に携わった経験のある筆者が、PythonでJSON形式のファイルを読み込んだ際にエラーがでた時の対処法を紹介してきました。
JSONの読み込みエラーは種類が限られています。
解決できないエラーが発生したら、何回でもこの記事に戻ってきてください。
この記事が少しでもあなたの役に立てていたらうれしいです。
頑張るあなたを応援しています!
それでは!
最短1分でできる!
>>【無料】Pythonでできること9選【初心者でも稼げます】
>>【料金別&徹底解説】 Pythonおすすめ勉強サイト8選【楽しく学ぼう】
コメント