如何将JSON列表数据存储到python变量中?

2024-05-01 22:09:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含一些数据的JSON文件。 testJSON.json

{
"hourlyData": [
    {
        "frequency": "49.96",
        "actual": " 2,240.43 ",
        "schedule": " 2,223.85 ",
        "acp": "325"
    },
    {
        "frequency": "50.04",
        "actual": " 1,862.88 ",
        "schedule": " 1,881.09 ",
        "acp": "275"
    },
    {
        "frequency": "50.04",
        "actual": " 1,882.17 ",
        "schedule": " 1,885.94 ",
        "acp": "275"
    }
  ],
"storageData": [
    {
        "config": "ESS1",
        "name": "BRPL",
        "Power Rating": "20",
        "Energy Rating": "20",
        "socLow": "0",
        "socHigh": "0.8",
        "Charge Eff": "0.9273",
        "Discharge Eff": "0.9273",
        "Round Trip Eff": "0.922",
        "Lower Limit": "57",
        "Mid Limit": "76",
        "High Limit": "95",
        "Thrushold": "5",
        "Discharging Price": "6"
    }
],

我想将这些值存储到python变量中。所以我首先创建了一个包含不同类型的不同变量的字典,然后创建了一个函数,打开JSON文件,然后尝试将这些JSON值存储到声明的变量中: test.py

import json
#decalaring variables 
storageData = {
    "name": 'No name specified',
    "powerRating":-1,
    "energyRating":-1,
    "annualMaxCycles":365,
    "socLow":-1,
    "socHigh":-1,
    "chargeEff":-1,
    "dChargeEff":-1,
    "lowerLimit": -1,
    "midLimit": -1,
    "highLimit": -1,
    "thrushold": 5,
    "dischargingPrice": 6
}
marketData = {
    "marketProducts": {
            "dsm":{
            "frequency":[],
            "schedule":[],
            "actual":[],
            "acp": [],
            }
          }
inputMode = 'JSON'
JSONfileName = "testJSON.json"

def inputJSON():
  if (inputMode == 'JSON'):
    fileName = JSONfileName
    # Import data from JSON files
    with open(JSONfileName, 'r') as myfile:
      dataJSON = ((myfile.read().replace('\n', '')))
    inputJSON = json.loads(dataJSON)

    # Assigning the storageData data
    storageData['powerRating'] = inputJSON['storageData']['Power Rating']
    storageData['energyRating'] = inputJSON['storageData']['energyRating']
    storageData['warranty'] = inputJSON['storageData']['powerRating']
    storageData['annualMaxCycles'] = inputJSON['storageData']['maxAnnualCycles']
    storageData['socLow'] = inputJSON['storageData']['socLow']
    storageData['socHigh'] = inputJSON['storageData']['socHigh']
    storageData['chargeEff'] = inputJSON['storageData']['chargeEff']
    storageData['dChargeEff'] = inputJSON['storageData']['dChargeEff']
    storageData['lowerLimit'] = inputJSON['storageData']['lowerLimit']
    storageData['midLimit'] = inputJSON['storageData']['midLimit']
    storageData['highLimit'] = inputJSON['storageData']['highLimit']
    storageData['thrushold'] = inputJSON['storageData']['thrushold']
    storageData['dischargingPrice'] = inputJSON['storageData']['dischargingPrice']

    marketData['marketProducts']['dsm']['frequency'] = inputJSON['hourlyData']['frequency']
    marketData['marketProducts']['dsm']['acp'] = inputJSON['hourlyData']['acp']
    marketData['marketProducts']['dsm']['actual'] = inputJSON['hourlyData']['actual']
    marketData['marketProducts']['dsm']['schedule'] = inputJSON['hourlyData']['schedule']

inputJSON()

它给我的错误

Traceback (most recent call last):
  File "C:/Users/nvats/PycharmProjects/dsm-final/test2.py", line 113, in <module>
    inputJSON()
  File "C:/Users/nvats/PycharmProjects/dsm-final/test2.py", line 80, in inputJSON
    storageData['powerRating'] = inputJSON['storageData']['Power Rating']
TypeError: list indices must be integers or slices, not str

Tags: jsonschedulefrequencyratingactualdsmacpmarketdata
1条回答
网友
1楼 · 发布于 2024-05-01 22:09:35

而不是

# Assigning the storageData data
storageData['powerRating'] = inputJSON['storageData']['Power Rating']
storageData['energyRating'] = inputJSON['storageData']['energyRating']
storageData['warranty'] = inputJSON['storageData']['powerRating']
storageData['annualMaxCycles'] = inputJSON['storageData']['maxAnnualCycles']
storageData['socLow'] = inputJSON['storageData']['socLow']
storageData['socHigh'] = inputJSON['storageData']['socHigh']
storageData['chargeEff'] = inputJSON['storageData']['chargeEff']
storageData['dChargeEff'] = inputJSON['storageData']['dChargeEff']
storageData['lowerLimit'] = inputJSON['storageData']['lowerLimit']
storageData['midLimit'] = inputJSON['storageData']['midLimit']
storageData['highLimit'] = inputJSON['storageData']['highLimit']
storageData['thrushold'] = inputJSON['storageData']['thrushold']
storageData['dischargingPrice'] = inputJSON['storageData']['dischargingPrice']

 # Assigning the storageData data
storageData['powerRating'] = inputJSON['storageData[0]']['Power Rating']
storageData['energyRating'] = inputJSON['storageData[0]']['energyRating']
storageData['warranty'] = inputJSON['storageData[0]']['powerRating']
storageData['annualMaxCycles'] = inputJSON['storageData[0]']['maxAnnualCycles']
storageData['socLow'] = inputJSON['storageData[0]']['socLow']
storageData['socHigh'] = inputJSON['storageData[0]']['socHigh']
storageData['chargeEff'] = inputJSON['storageData[0]']['chargeEff']
storageData['dChargeEff'] = inputJSON['storageData[0]']['dChargeEff']
storageData['lowerLimit'] = inputJSON['storageData[0]']['lowerLimit']
storageData['midLimit'] = inputJSON['storageData[0]']['midLimit']
storageData['highLimit'] = inputJSON['storageData[0]']['highLimit']
storageData['thrushold'] = inputJSON['storageData[0]']['thrushold']
storageData['dischargingPrice'] = inputJSON['storageData[0]']['dischargingPrice']

因为它是一个数组,其第一个索引包含json数据

例如“hourlyData”

for(data of inputJSON['hourlyData']){
    marketData['marketProducts']['dsm']['frequency'] = data['frequency']
}

希望有帮助

相关问题 更多 >