teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/12/21 08:48

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -1,1 +1,33 @@
1
+ そもそもJSON形式じゃないですね、それ。[JSON の紹介](https://www.json.org/json-ja.html)
2
+ 正しい形式で記述されていれば、リストもちゃんと読み込めます。
3
+ ```Python
4
+ import json
5
+
6
+ src = '["value1", "value2", "value3"]'
7
+ print(json.loads(src)) # ok
8
+
9
+ src = "['value1', 'value2', 'value3']"
10
+ print(json.loads(src)) # ng
11
+ ```
12
+
13
+ **実行結果** [Wandbox](https://wandbox.org/permlink/zQ9ZmidFFgZdlhgW)
14
+ ```
15
+ ['value1', 'value2', 'value3']
16
+ Traceback (most recent call last):
17
+ File "prog.py", line 7, in <module>
18
+ print(json.loads(src))
19
+ ...
20
+ json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
21
+ ```
22
+
23
+ ---
1
- [ast.literal_eval](https://docs.python.jp/3/library/ast.html#ast.literal_eval)が使えます。
24
+ Pythonのリテラルの形式で書かれた文字列をロードしたい場合は、[ast.literal_eval](https://docs.python.jp/3/library/ast.html#ast.literal_eval)が使えます。
25
+ ```Python
26
+ import ast
27
+
28
+ src = '["value1", "value2", "value3"]'
29
+ print(ast.literal_eval(src)) # ok
30
+
31
+ src = "['value1', 'value2', 'value3']"
32
+ print(ast.literal_eval(src)) # ok
33
+ ```