Python で JSON ファイルをあつかう練習

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から張り付けると、このようになることもあるようですので見直してみてください。

曲のリストを読み込むコード

こんな感じのコードになります。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