JSON Данные создают ключевую ошибку для вложенных данных - PullRequest
0 голосов
/ 28 мая 2020

Я получаю ключевую ошибку при попытке доступа к некоторым вложенным данным JSON, потому что я изо всех сил пытаюсь распечатать ВТОРОЙ набор данных в ["updates"], см. Код ниже:

for url in URLs:
    JSONdata = requests.get(url, cookies=cookies, verify=False) .json()
    notifications = JSONdata["notifications"]
    for JSONkey in notifications:
        outDiscards = JSONkey["updates"]["outDiscards"]["value"]["avg"]["float"]
        inDiscards = JSONkey["updates"]["inDiscards"]["value"]["avg"]["float"]
        name = JSONkey["path_elements"][1]
        interface = JSONkey["path_elements"][5]
        print(name, interface, outDiscards, inDiscards, sep=',')

Данные JSON выглядят следующим образом, и я пытаюсь получить доступ к плавающему средству AVG для ключа ["outDiscards]" (прокрутите до конца, чтобы найти его):

{
 "notifications": [
  {
   "timestamp": "1590228300000000000",
   "path_elements": [
    "Devices",
    "ASDASDA23",
    "versioned-data",
    "interfaces",
    "data",
    "Ethernet6",
    "aggregate",
    "rates",
    "1m"
   ],
   "updates": {
    "alignmentErrors": {
     "key": "alignmentErrors",
     "value": {
      "avg": {
       "float": 0
      },
      "max": {
       "float": 0
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0
      },
      "weight": {
       "float": 1
      }
     }
    },
    "fcsErrors": {
     "key": "fcsErrors",
     "value": {
      "avg": {
       "float": 0
      },
      "max": {
       "float": 0
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0
      },
      "weight": {
       "float": 1
      }
     }
    },
    "frameTooLongs": {
     "key": "frameTooLongs",
     "value": {
      "avg": {
       "float": 0
      },
      "max": {
       "float": 0
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0
      },
      "weight": {
       "float": 1
      }
     }
    },
    "frameTooShorts": {
     "key": "frameTooShorts",
     "value": {
      "avg": {
       "float": 0
      },
      "max": {
       "float": 0
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0
      },
      "weight": {
       "float": 1
      }
     }
    },
    "inDiscards": {
     "key": "inDiscards",
     "value": {
      "avg": {
       "float": 0
      },
      "max": {
       "float": 0
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0
      },
      "weight": {
       "float": 1
      }
     }
    },
    "inErrors": {
     "key": "inErrors",
     "value": {
      "avg": {
       "float": 0
      },
      "max": {
       "float": 0
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0
      },
      "weight": {
       "float": 1
      }
     }
    },
    "outErrors": {
     "key": "outErrors",
     "value": {
      "avg": {
       "float": 0
      },
      "max": {
       "float": 0
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0
      },
      "weight": {
       "float": 1
      }
     }
    },
    "symbolErrors": {
     "key": "symbolErrors",
     "value": {
      "avg": {
       "float": 0
      },
      "max": {
       "float": 0
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0
      },
      "weight": {
       "float": 1
      }
     }
    }
   }
  },
  {
   "timestamp": "1590672660000000000",
   "path_elements": [
    "Devices",
    "ASDASDA23",
    "versioned-data",
    "interfaces",
    "data",
    "Ethernet6",
    "aggregate",
    "rates",
    "1m"
   ],
   "updates": {
    "inOctets": {
     "key": "inOctets",
     "value": {
      "avg": {
       "float": 2252589.403482577
      },
      "max": {
       "float": 3062029.5123118195
      },
      "min": {
       "float": 1716651.1165519762
      },
      "stddev": {
       "float": 486507.3457503787
      },
      "weight": {
       "float": 0.9999999999999999
      }
     }
    },
    "inUcastPkts": {
     "key": "inUcastPkts",
     "value": {
      "avg": {
       "float": 4924.985636262933
      },
      "max": {
       "float": 6405.247375228221
      },
      "min": {
       "float": 4027.16222744576
      },
      "stddev": {
       "float": 856.3274693923914
      },
      "weight": {
       "float": 0.9999999999999999
      }
     }
    },
    "outMulticastPkts": {
     "key": "outMulticastPkts",
     "value": {
      "avg": {
       "float": 0.03331537922781352
      },
      "max": {
       "float": 0.09996021185548479
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0.047115061840280935
      },
      "weight": {
       "float": 0.9999999999999999
      }
     }
    },
    "outOctets": {
     "key": "outOctets",
     "value": {
      "avg": {
       "float": 532952.2820988153
      },
      "max": {
       "float": 686277.7896707873
      },
      "min": {
       "float": 453320.58138715214
      },
      "stddev": {
       "float": 80364.91411229585
      },
      "weight": {
       "float": 0.9999999999999999
      }
     }
    },
    "outUcastPkts": {
     "key": "outUcastPkts",
     "value": {
      "avg": {
       "float": 4409.95750691497
      },
      "max": {
       "float": 5605.478585933741
      },
      "min": {
       "float": 3652.11719308749
      },
      "stddev": {
       "float": 677.6427171449172
      },
      "weight": {
       "float": 0.9999999999999999
      }
     }
    }
   }
  },
  {
   "timestamp": "1590444480000000000",
   "path_elements": [
    "Devices",
    "ASDASDA23",
    "versioned-data",
    "interfaces",
    "data",
    "Ethernet6",
    "aggregate",
    "rates",
    "1m"
   ],
   "updates": {
    "outDiscards": {
     "key": "outDiscards",
     "value": {
      "avg": {
       "float": 0
      },
      "max": {
       "float": 0
      },
      "min": {
       "float": 0
      },
      "stddev": {
       "float": 0
      },
      "weight": {
       "float": 1
      }
     }
    }
   }
  },

Я продолжаю получать KeyError, потому что, если я распечатываю только ["updates"], он достигает только "SymbolErrors" в данных JSON, потому что он закрывается))), я не знаю, как для доступа ко второй части данных

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Расположение Outdiscards постоянно менялось, я исправил эту проблему с помощью метода try and except и доступа к правильным индексам

    inDiscards = JSONkey[0]["updates"]["inDiscards"]["value"]["avg"]["float"]
    name = JSONkey[1]["path_elements"][1]
    interface = JSONkey[1]["path_elements"][5]
    try:
        outDiscards = JSONkey[0]["updates"]["outDiscards"]["value"]["avg"]["float"]
        # print(inDiscards, outDiscards)
    except KeyError:
        outDiscards = JSONkey[2]["updates"]["outDiscards"]["value"]["avg"]["float"]
        # print(inDiscards, outDiscards)
0 голосов
/ 28 мая 2020

inDiscards и outDiscards есть не в каждом updates, который у вас есть, а .get("inDiscards" or "outDiscards") не делает то, что вы думаете.

Просто проверьте updates dict, вы обнаружите, что оба inDiscards и outDiscards не находятся в одном обновлении dict.

...