Python を利用して、簡単な文字列のリストの操作を行いたいなと考えたときに、リストを JSON で記述しておけば楽に操作できそうだったので、試しに JSON ファイルを読み込むコードを作ってみました。
JSON ファイルの読み込み
今回、例として扱うのは、以下の様な「プレイリスト」のリストと、プレイリストに入っている「曲のリスト」を想定します。このような文字列を読み込む場合は、json.loads() を使います。驚くほど簡単でした。(ファイルから読み込む場合は、json.load() を使います。)
プレイリストのリスト:
{
“playlists”: {
“favorite”: “AAAAABBBBBCCCCC”,
“drive”: “DDDDDEEEEEFFFFF”,
“relax”: “GGGGGHHHHHIIIII”,
“sleep”: “JJJJJKKKKKLLLLL”
}
}
曲のリスト:
[
{ “id”: “MMMMMNNNNNOOOOO”, “info”: “Title1”},
{ “id”: “PPPPPQQQQQRRRRR”, “info”: “Title2”},
{ “id”: “SSSSSTTTTTUUUUU”, “info”: “Title3”},
{ “id”: “VVVVVWWWWWXXXXXX”, “info”: “Title4”}
]
プレイリストを読み込むコード
こんな感じのコードになります。16行目で json.loads を使っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import json playlists = ''' { "playlists": { "favorite": "AAAAABBBBBCCCCC", "drive": "DDDDDEEEEEFFFFF", "relax": "GGGGGHHHHHIIIII", "sleep": "JJJJJKKKKKLLLLL" } } ''' def get_playlist_id(pl_lists, key): fid = None dc = json.loads(pl_lists) fid = dc['playlists'][key] return fid fid = get_playlist_id(playlists, 'favorite') print(fid) fid = get_playlist_id(playlists, 'drive') print(fid) fid = get_playlist_id(playlists, 'relax') print(fid) fid = get_playlist_id(playlists, 'sleep') print(fid) |
実行結果:
1 2 3 4 | AAAAABBBBBCCCCC DDDDDEEEEEFFFFF GGGGGHHHHHIIIII JJJJJKKKKKLLLLL |
このとき、JSONDecodeError で、Expecting property name enclosed in double quotes: line 3 column 1 (char 3) の様なものが出たら JSON の記述が間違っています。
今回の場合、どこも間違えていないはずなのに・・・と思って、デバッガで確認してみると「変な制御コード」が入っていました。webから張り付けると、このようになることもあるようですので見直してみてください。
今回の場合、どこも間違えていないはずなのに・・・と思って、デバッガで確認してみると「変な制御コード」が入っていました。webから張り付けると、このようになることもあるようですので見直してみてください。
曲のリストを読み込むコード
こんな感じのコードになります。16行目で json.loads を使っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import json favorite = ''' [ { "id": "MMMMMNNNNNOOOOO", "info": "Title1"}, { "id": "PPPPPQQQQQRRRRR", "info": "Title2"}, { "id": "SSSSSTTTTTUUUUU", "info": "Title3"}, { "id": "VVVVVWWWWWXXXXXX", "info": "Title4"} ] ''' def get_sound_source_id(pl, truck_num): sid = None info = None dc = json.loads(pl) sid = dc[truck_num]['id'] info = dc[truck_num]['info'] return sid,info sid,info = get_sound_source_id(favorite, 0) print("id=" + sid + " info=" + info) sid,info = get_sound_source_id(favorite, 1) print("id=" + sid + " info=" + info) sid,info = get_sound_source_id(favorite, 2) print("id=" + sid + " info=" + info) sid,info = get_sound_source_id(favorite, 3) print("id=" + sid + " info=" + info) |
実行結果:
1 2 3 4 | id=MMMMMNNNNNOOOOO info=Title1 id=PPPPPQQQQQRRRRR info=Title2 id=SSSSSTTTTTUUUUU info=Title3 id=VVVVVWWWWWXXXXXX info=Title4 |