#python #json #string #list
#python #json #строка #Список
Вопрос:
У меня есть строка, содержащая массив JSON:
s = "['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']"
Я попытался проанализировать его как JSON:
import json
l = json.loads(s)
Я хотел получить список, но возникло исключение:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/xx/anaconda3/lib/python3.7/json/__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "/home/xx/anaconda3/lib/python3.7/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/home/xx/anaconda3/lib/python3.7/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
Я не уверен, что здесь происходит.
Комментарии:
1. Ваша строка недопустима в формате json. Это работает:
s2 = s.replace("'", """); l = json.loads(s2)
Ответ №1:
Используйте ast.literal_eval
:
>>> from ast import literal_eval
>>> s = "['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']"
>>> literal_eval(s)
['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']
Комментарии:
1. Спасибо. Это более элегантно, чем замена символов в строке перед синтаксическим анализом в формате json.
Ответ №2:
Стандарт Json требует двойных кавычек, он не поддерживает одинарные кавычки. Вот почему вы получаете ошибку
Таким образом, строка должна быть
s = '["GY2_CAMP1", "GY2_CAMP2", "GY2_CAMP3", "GY2_CAMP4", "GY2_CAMP5"]'
Затем вы получаете ожидаемое поведение
import json
l = json.loads(s)
print(l)
>> ['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']
Ответ №3:
Сначала замените '
на "
, а затем загрузите.
import json
s = "['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']"
s.replace("'", """)
l = json.loads(s1)
print(l)
получит
['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']