Извлечение элемента JSON

1

У меня есть ответ JSON с веб-сайта, показанного ниже. Я хочу напечатать ключи data 'value' и 'datetime' data. Я не могу получить доступ к этим двум элементам в ответ JSON.

  data= {"parameter_name":"Inst",
    "parameter_code":"WL1","data":[
    {"value":3.1289999485,"datetime":"2018-07-01T00:00:00+00:00"},
    {"datetime":"2018-07-01T00:30:00+00:00","value":3.1859998703},
    {"value":3.33099985123,"datetime":"2018-07-01T00:45:00+00:00"},
    {"datetime":"2018-07-01T01:15:00+00:00","value":3.22300004959},
    {"datetime":"2018-07-01T01:45:00+00:00","value":3.32299995422}]}

мой код до сих пор

for element in len(data['data']):
            date = element['datetime']
            value = element['value']

            print value, date

Я получаю ошибку

for element in len(data['data']):
TypeError: string indices must be integers, not str
Теги:

3 ответа

2
Лучший ответ

То, что вы показали как data JSON, скорее всего, не является фактическим значением data. При попытке получить доступ к данным, как Python dict, он поднимает TypeError: string indices must be integers, not str. Вероятно, ваши data JSON выглядят так (обратите внимание на цитаты):

# This is JSON, essentialy a string in the format of a Python dict.
data = """{
    "parameter_name": "Inst",
    "parameter_code": "WL1",
    "data":[
        {
            "value":3.1289999485,
            "datetime":"2018-07-01T00:00:00+00:00"
        },
        {
            "datetime":"2018-07-01T00:30:00+00:00",
            "value":3.1859998703
        },
        {
            "value":3.33099985123,
            "datetime":"2018-07-01T00:45:00+00:00"
        },
        {
            "datetime":"2018-07-01T01:15:00+00:00",
            "value":3.22300004959
        },
        {
            "datetime":"2018-07-01T01:45:00+00:00",
            "value":3.32299995422
        }
    ]
}"""

Преобразуйте его в Python dict с помощью пакета json стандартной библиотеки Python:

import json

# This converts the JSON string into a Python dict
data = json.loads(data)

Вы можете получить доступ к data и к их "данным", а затем перебрать их (как вы делали):

for element in data['data']:
    print(element['value'], element['datetime'])
  • 0
    Спасибо за помощь .. получил это. Я также видел stackoverflow.com/questions/37986406/…
  • 0
    @ gi.rajan Да, та же идея, что и этот вопрос / решение. Рад, что смог помочь :-)
2

Вы можете попробовать следующее:

for element in data['data']:
    date = element['datetime']
    value = element['value']

print(date)
print(value)

Выход:

3.1289999485
2018-07-01T00:00:00+00:00
3.1859998703
2018-07-01T00:30:00+00:00
3.33099985123
2018-07-01T00:45:00+00:00
3.22300004959
2018-07-01T01:15:00+00:00
3.32299995422
2018-07-01T01:45:00+00:00

Объяснение:

Если вы хотите перебрать элементы в list, выполните следующие действия:

 for element in data['data']

Если вы хотите перебирать список по их индексу:

 for index in range(len(data['data'])):
1

Если у вас есть сетевой ответ в текстовом формате, вам также придется сначала его декодировать. Проверьте https://docs.python.org/2/library/json.html (для python 2) или https://docs.python.org/3.7/library/json.html (для python 3), чтобы увидеть документацию о библиотеке json. Ты должен:

import json
decodedData = json.loads(data)

а затем переверните декодированные данные, как вы это сделали.

  • 0
    Спасибо, что указал мне правильное направление ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню