Как перебирать ключи в данных JSON

#python #api #loops

#python #API #циклы

Вопрос:

У меня есть большой список координат gps и большой список дат, и я пытаюсь извлечь данные с помощью API, который предоставляет данные json, которые выглядят следующим образом для одной пары координат gps:

 {
 "features": [
  {
   "geometry": {
    "coordinates": [
     74.11311,
     30.71151,
     191.24
    ],
    "type": "Point"
   },
   "properties": {
    "parameter": {
     "T2MWET": {
      "20150101": -3.44,
      "20150102": -0.85
     }
    }
   },
   "type": "Feature"
  }
 ],
  

где данные, о которых я забочусь, находятся в ключах «20150101» и «20150102». Это даты, и в конечном итоге у меня их будут сотни (каждый день в году).

То, что я придумал, это (я буду читать в координатах gps и списке дат):

 gps_pairs = [('30.71152', '74.11307'), ('60.71393', '74.11334')]

dates = ['20150101', '20150102']

wbt2 = []

for p in gps_pairs:
  url_a = "https://power.larc.nasa.gov/cgi-bin/v1/DataAccess.py?amp;request=executeamp;identifier=SinglePointamp;parameters=T2MWETamp;startDate=20150101amp;endDate=20150102amp;userCommunity=AGamp;tempAverage=DAILYamp;outputList=CSVamp;"
  url = url_a   "lat="  p[0]   "amp;lon="   p[1]
  data_json = requests.get(url).json()
  if 'error' not in data_json:
    for d in dates:
          wbt2.append([data_json['features'][0] ['geometry']['coordinates'],
                     data_json['features'][0] ['properties']['parameter']['T2MWET'][d],])

dataset = pd.DataFrame(wbt2)
dataset
  

Я в основном согласен с этим, за исключением того, что вывод

 
                0                      1
0   [74.11308, 30.71153, 191.24]    -3.44
1   [74.11308, 30.71153, 191.24]    -0.85
2   [74.11335, 60.71394, 58.7]      -26.20
3   [74.11335, 60.71394, 58.7]      -33.39
  

Но я хочу этого:

     0                                1        2
0   [74.11308, 30.71153, 191.24]     -3.44   -0.85
1   [74.11335, 60.71394, 58.7]      -26.20  -33.39
  

Похоже, мой цикл по датам находится не в том месте?

Я также не уверен, сколько времени потребуется для запуска, когда у меня есть более тысячи GPS-координат и 365 дат, и есть ли более эффективные способы. (Я всего месяц или около того использую Python).

Ответ №1:

Следующее даст вам все значения T2MWET , независимо от даты.

 values = list(data_json['features'][0] ['properties']['parameter']['T2MWET'].values())
  

Итак, если я следую тому, что вы хотите, чтобы произошло:

 for p in gps_pairs:
  url_a = "https://power.larc.nasa.gov/cgi-bin/v1/DataAccess.py?amp;request=executeamp;identifier=SinglePointamp;parameters=T2MWETamp;startDate=20150101amp;endDate=20150102amp;userCommunity=AGamp;tempAverage=DAILYamp;outputList=CSVamp;"
  url = url_a   "lat="  p[0]   "amp;lon="   p[1]
  data_json = requests.get(url).json()
  if 'error' not in data_json:
    wbt2.append([data_json['features'][0] ['geometry']['coordinates'],
                list(data_json['features'][0] ['properties']['parameter']['T2MWET'].values())])
  

Комментарии:

1. Большое спасибо! Это работает. Затем я выполнил последнюю манипуляцию с pandas, чтобы получить ее точно так, как мне нужно

2. @Ди рад это слышать. Примите ответ и проголосуйте за то, чтобы он работал для вас!

3. Было бы неплохо принять ответ @Dee, отметив его галочкой, поскольку он помог вам с вашим вопросом.

4. Ах, извините, сделал это сейчас. Не показывает mu upvate, хотя, поскольку я новичок