如何在列表中附加元素并将其写入JSON?

2024-10-01 22:41:27 发布

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

  1. 将JSON文件加载到开头的aPool列表中。你知道吗

    def LoadPoolTemplate():
      sFilename = './pool_template.json'
    
      if os.path.exists(sFilename):
        with open(sFilename, 'r') as fJsonFile:
          aPool = json.load(fJsonFile)
    
      return aPool
    
  2. aTempJson附加到aPool[index]['devices']

    def UpdateJSON(aPool, aDevList):
      sFilename = './device_template.json'
      if os.path.exists(sFilename):
        with open(sFilename, 'r') as fJsonFile:
          aTempJson = json.load(fJsonFile)
      else:
        print ("No such file names " + sFilename)
    
      for item in aDevList:
        aTempJson['id'] = item[1]
        aTempJson['atti']['high'] = item[2]
    
        for (i,pid) in enumerate(aPool):
          if pid['id'] == item[0]:
            aPool[i]['devices'].append(aTempJson)
            break
    
  3. aPool列表更新为JSON文件

    def CreateDeviceJSON(aDevice):
      with open(gDevice, 'w') as fOutfile:
        json.dump(aDevice, fOutfile, indent=2)
    
  4. 阅读列表

    def ReadDeviceList():
      aDevList = []
    
      with open(gDevList, 'r') as fList:
        for line in fList:
          columns = line.strip().split(',')
          aDevList.append(columns)
    
      return aDevList
    
  5. 主要功能

    def main():
      aDevDist = []
      aDeviceJson = []
    
      aDeviceJson = LoadPoolTemplate()
      aDeviceList = ReadDeviceList()
      aDeviceJson = UpdateJSON(aDeviceJson, aDeviceList)
    
      CreateDeviceJSON(aDeviceJson)
    

我不知道为什么设备列表中的所有元素都一样,请帮帮我。你知道吗

JSON文件输出:

[
  {
    "id": "id1",
    "devices": [
      {
         "atti": {
          "high": "190",
          "weight": "80"
        },
        "id": "Jordan"
      },
      {
         "atti": {
          "high": "190",
          "weight": "80"
        },
        "id": "Jordan"
      },
      {
         "atti": {
          "high": "190",
          "weight": "80"
        },
        "id": "Jordan"
      }
    ]
  },
  {
    "id": "id2",
    "devices": [
      {
         "atti": {
          "high": "190",
          "weight": "80"
        },
        "id": "Jordan"
      }
    ]
  },
  {
    "id": "id3",
    "devices": [
      {
         "atti": {
          "high": "190",
          "weight": "80"
        },
        "id": "Jordan"
      }
    ]
  }
]

输入源如下:

["id1", "apple", "167"]
["id1", "carter", "203"]
["id1", "jason", "188"]
["id2", "paul", "178"]
["id3", "Jordan", "190"]

池模板

[
  {
    "id": "id1",
    "devices": [
    ]
  },
  {
    "id": "id2",
    "devices": [
    ]
  },
  {
    "id": "id3",
    "devices": [
    ]
  }
]

Tags: idjson列表defdevicesweighthighid1
1条回答
网友
1楼 · 发布于 2024-10-01 22:41:27

此处:

for item in aDevList:
    aTempJson['id'] = item[1]
    aTempJson['atti']['high'] = item[2]

    for (i,pid) in enumerate(aPool):
      if pid['id'] == item[0]:
        aPool[i]['devices'].append(aTempJson)
        break

您正在修改相同的aTempJsondict,并将其反复附加到列表中。你要做的是为每个项目创建一个新的dict。你知道吗

相关问题 更多 >

    热门问题