Я новичок в Python. Я пытаюсь проанализировать результат json из URL-адреса. Первоначально я использовал следующее:Получение «KeyError» после декодирования json от url
response = urllib.request.urlopen(url)
json_obj = json.load(response)
Это дало ошибку вдоль линий «объекта JSON должен быть„ул“не„байт“» так, после поиска на StackOverflow, я расшифровал ответ выглядит следующим образом:
f = urllib.request.urlopen(url)
charset = f.info().get_param('charset', 'utf8')
data = f.read()
decoded = json.loads(data.decode(charset))
Если я печатаю «декодируется» это выглядит следующим образом:
{'Links': {'SummaryData': 'https://localhost/piwebapi/streams/P0_7qHaW4UHU-RlCaz8tpasAAQAAAAU0hJTExNQU42NDIwXFNJTlVTT0lE/summary', 'Value': 'https://localhost/piwebapi/streams/P0_7qHaW4UHU-RlCaz8tpasAAQAAAAU0hJTExNQU42NDIwXFNJTlVTT0lE/value', 'InterpolatedData': 'https://localhost/piwebapi/streams/P0_7qHaW4UHU-RlCaz8tpasAAQAAAAU0hJTExNQU42NDIwXFNJTlVTT0lE/interpolated', 'Self': 'https://localhost/piwebapi/points/P0_7qHaW4UHU-RlCaz8tpasAAQAAAAU0hJTExNQU42NDIwXFNJTlVTT0lE', 'PlotData': 'https://localhost/piwebapi/streams/P0_7qHaW4UHU-RlCaz8tpasAAQAAAAU0hJTExNQU42NDIwXFNJTlVTT0lE/plot', 'DataServer': 'https://localhost/piwebapi/dataservers/s0_7qHaW4UHU-RlCaz8tpasAU0hJTExNQU42NDIw', 'RecordedData': 'https://localhost/piwebapi/streams/P0_7qHaW4UHU-RlCaz8tpasAAQAAAAU0hJTExNQU42NDIwXFNJTlVTT0lE/recorded'}, 'Id': 1, 'Name': 'SINUSOID', 'WebId': 'P0_7qHaW4UHU-RlCaz8tpasAAQAAAAU0hJTExNQU42NDIwXFNJTlVTT0lE'}
Теперь, когда я пытаюсь вытащить особое значение, я получаю «KeyError». Например:
print(decoded[0])
возвращает следующее:
Traceback (most recent call last):
File "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensio
ns\Microsoft\Python Tools for Visual Studio\2.1\visualstudio_py_util.py", line 1
06, in exec_file
exec_code(code, file, global_variables)
File "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensio
ns\Microsoft\Python Tools for Visual Studio\2.1\visualstudio_py_util.py", line 8
2, in exec_code
exec(code_obj, global_variables)
File "C:\Users\shillman\Documents\Visual Studio 2010\Projects\PythonApplicatio
n1\PythonApplication1\PythonApplication1.py", line 26, in <module>
print(decoded[0])
KeyError: 0
Какой формат "декодируется" в? Есть ли способ, которым я могу это сделать, где это действительно словарь? Есть ли способ конвертировать его в словарь? Любая помощь/совет приветствуются! Спасибо.
Спасибо за ответ. Когда я использую один из реальных ключей, говорят: печать (декодированного [ «WEBID»] Я все еще получаю «KeyError„WEBID“» Это не способ ссылаться на эту клавишу – JOEMan90
Ах, это чувствительно к регистру? Я не знал этого. Работает сейчас. Спасибо! – JOEMan90
@ JOEMan90: Не все так сложно написать нестандартный подклассом без учета регистра и подключить модуль 'json', чтобы вернуть их вместо нормальных значений dict, если вы действительно, очень хочется. Но сам JSON по своей сути чувствителен к регистру, так что это может стать довольно запутанным в зависимости от ваших входных данных, и, вероятно, это не очень хорошая идея. – abarnert