#python #json #extract #decode
#python #json #извлечь #расшифровать
Вопрос:
Я пытался извлечь только определенные данные из файла JSON с помощью python.Я хотел создать массив из моего json, в котором есть несколько записей, как показано ниже
[{"Device Name":"abc", "Device Caps":["a1", "b1", "c1"]},
{"Device Name":"def", "Device Caps":["a2", "b2", "c2"]},
{"Device Name":"ghi", "Device Caps":["a3", "b3", "c3"]},
{"Device Name":"jkl", "Device Caps":["a4", "b4", "c4"]}]
Мне нужен мой вывод как
[«a1», «a2», «a3», «a4»]
Комментарии:
1.
[item["Device Caps"][0] for item in my_data]
2. Итак, где вы застряли с этим? Обратите внимание, что после анализа все, что у вас есть, это список со словарями в нем. Они обрабатываются одинаково, откуда бы они ни были получены; на самом деле это не проблема JSON.
3. Консоль выдает ошибку при выполнении этого кода. Ошибка, отображаемая ниже.
one=[item["Device Caps"][0] for item in data] TypeError: string indices must be integers, not str
Ответ №1:
Если это буквально ваш входной файл, то следующий код выдаст желаемый результат:
import json
with open("input.json") as input_file:
data = json.load(input_file)
data = [d["Device Caps"][0] for d in data]
print(data)
Комментарии:
1. Трассировка (последний последний вызов): файл «C:UsersinjaleeaDesktoptest1.py «, строка 13, в файле <module> data = json.load(input_file) «C:Python27libjson_init_.py «, строка 290, в файле load **kw) «C:Python27libjson_init_.py «, строка 338, при загрузке возвращает файл _default_decoder.decode(ы)»C:Python27libjsondecoder.py «, строка 366, в decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) Файл «C:Python27libjsondecoder.py «, строка 384, в raw_decode вызывает ошибку ValueError(«Ни один объект JSON не может быть декодирован») Ошибка ValueError: ни один объект JSON не можетбыть декодированным
2.Трассировка (последний последний вызов): файл «C:UsersinjaleeaDesktoptest1.py «, строка 13, в файле <module> data = json.load(input_file) «C:Python27libjson_init_.py «, строка 290, в файле load **kw) «C:Python27libjson_init_.py «, строка 338, при загрузке возвращает файл _default_decoder.decode(ы)»C:Python27libjsondecoder.py «, строка 366, в decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) Файл «C:Python27libjsondecoder.py «, строка 384, в raw_decode вызывает ошибку ValueError(«Ни один объект JSON не может быть декодирован») Ошибка ValueError: ни один объект JSON не можетбыть декодированным
3. Вернул ошибку ниже
Traceback (most recent call last): File "C:UsersinjaleeaDesktoptest1.py", line 13, in <module>data = json.load(input_file)File "C:Python27libjson__init__.py", line 290, in load**kw) File "C:Python27libjson__init__.py", line 338, in loadreturn _default_decoder.decode(s) File "C:Python27libjsondecoder.py", line 366, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:Python27libjsondecoder.py", line 384, in raw_decode raise ValueError("No JSON object could be decoded") ValueError: No JSON object could be decoded
4. Из этого сообщения об ошибке я делаю вывод, что то, что вы опубликовали, не является вашим файлом JSON.
5. Вы были правы. В моем json был еще один раздел комментариев сверху. Есть ли способ их игнорировать?