使用python将新值添加到JSON中的特定位置

af7jpaap  于 2023-01-03  发布在  Python
关注(0)|答案(2)|浏览(239)

我有一个JSON文件,需要用新的键值对更新。
当前json:

[{'Name': 'AMAZON',
  'Type': 'Web',
  'eventTimeEpoch': 1611667194}]

我需要添加一个位置参数,并将其更新为"USA"。但当尝试用下面的代码更新它时,它会将值附加到位置参数中以结束。如下所示。

[{'Name': 'AMAZON',
  'Type': 'Web',
  'eventTimeEpoch': 1611667194,
  'location': 'USA'}]

如何在Name之后添加此location参数。
预期产出:

[{'Name': 'AMAZON',
  'location': 'USA',
  'Type': 'Web',
  'eventTimeEpoch': 1611667194
  }]

当前代码:

filename='test.json'
jsonFile = open(filename, "r") # Open the JSON file for reading
data = json.load(jsonFile) 
jsonFile.close() 

data[0]["location"] = "USA"
data
8hhllhi2

8hhllhi21#

首先,您当前的JSON文件格式不正确。JSON需要双引号而不是单引号。
虽然插入的键-值对的顺序在Python 3.7中得到了保证,但是你没有任何选项可以“插入”到字典中的特定位置(比如list),而且人们在处理JSON文件时通常不考虑键的顺序,无论如何你都是通过“键”来获得值的。
话虽如此,你可以这样做:

import json

with open("test.json") as f:
    data = json.load(f)
    print(data)

new_d = {"Name": data[0].pop("Name"), "location": "USA", **data[0]}
print(new_d)

这样我们就创建了一个具有所需顺序的 new 字典,因为"location"键靠近条目的开头,所以我们弹出第一个键-值对,然后插入"location"键,再用**操作符解包其余的键。

nnsrf1az

nnsrf1az2#

但是你也可以做一个简单的破解来保持它的顺序,就像这样

In [4]: d = [{'Name': 'AMAZON',
   ...:   'Type': 'Web',
   ...:   'eventTimeEpoch': 1611667194}]

In [5]: pos = list(d[0].keys()).index('Name')
   ...: items = list(d[0].items())
   ...: items.insert(pos+1, ('location', 'USA'))
   ...: d[0] = dict(items)

In [6]: print(d)
Out[6]: 
[{'Name': 'AMAZON',
  'location': 'USA',
  'Type': 'Web',
  'eventTimeEpoch': 1611667194}]

相关问题