goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

JSONをPythonで読み込ませるとき、シングルクォートとかでうまく読み込まない場合は

2021-02-15 13:05:11 | ネットワーク
ast.literal_eval使うのも手。'だけでなく、TrueとかFalseが"で囲ってなくても行ける。

具体的に説明すると、たとえば、
第6回・JSONファイル|CSV、XML、JSON…データフォーマットの変遷について考える
https://www.gixo.jp/blog/4196/
にあるようなJSONを読むことを考える。

上記にある例は、”が全角になっているので、それを半角にして、空白カットすると、
こんな風になる

[{"順位":1,"氏名":"王貞治","本数":868},{"順位":2,"氏名":"野村克也","本数":657},{"順位":3,"氏名":"門田博光","本数":567},{"順位":4,"氏名":"山本浩二","本数":536},{"順位":5,"氏名":"清原和博","本数":525}]

この場合、pythonで読み込むには、普通にjson.load()で読み込める。こんなかんじのソースになる。
import json
f=open('C:\\Users\\user\\Desktop\\sample.txt','r')
dic = json.load(f)
print(dic)


ただ、これだと、ダブルクォートをシングルクォートに変えただけで、読み込めなくなる。
変換すればいいじゃん!と思うかもしれないけど、値にダブルクォートの箇所があるため、シングルクォートがある場合、単純にダブルクォートに変換すると、読み込みに失敗する。
また、真偽のTrue,Falseについてはダブルクォートがついていない場合がある。
そういうときに、どうするか?

ast.literal_eval()を使うと読み込める。具体的には、上のケースをast.literal_evalで書くと、こんな感じ
import ast
f= open('C:\\Users\\user\\Desktop\\sample.txt', 'r')
data=f.read()
dic = ast.literal_eval(data)
print(dic)

これだと、シングルクォート、真偽の場合も読み込める
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 「音響ハウス」みてきた | トップ | 松丸亮吾さん(謎解きクリエー... »
最新の画像もっと見る

ネットワーク」カテゴリの最新記事