我有一个文件' test.json'其中包含一个数组" rows"和另一个子阵列"允许"其中一些字母表就像" A"," B"等。但我想修改子阵列的内容。我能怎么做??
test.json文件如下:
{"rows": [
{
"Company": "google",
"allowed": ["A","B","C"]},#array containg 3 variables
{
"Company": "Yahoo",
"allowed": ["D","E","F"]#array contanig 3 variables
}
]}
但我想修改"允许"阵列。并希望将第3个索引更新为" LOOK"而不是" C"。以便结果数组看起来像:
{"rows": [
{
"Company": "google",
"allowed": ["A","B","LOOK"]#array containg 3 variables
},
{
"Company": "Yahoo", #array containing 3 variables
"allowed": ["D","E","F"] #array containing 3 variables
}
]}
我的节目:
import json
with open('test.json') as f:
data = json.load(f)
for row in data['rows']:
a_dict = {row['allowed'][1]:"L"}
with open('test.json') as f:
data = json.load(f)
data.update(a_dict)
with open('test.json', 'w') as f:
json.dump(data, f,indent=2)
答案 0 :(得分:1)
您的程序存在一些问题。
第一个问题是你没有查找“允许”的最后一个元素。阵列:
a_dict = {row['allowed'][1]:"L"}
请记住,数组指标从零开始。例如:
['Index 0', 'Index 1', 'Index 2']
但主要的问题是,当你走过每一行时,你会获取内容 那一行,但后来不做任何事情。
import json
with open('test.json') as f:
data = json.load(f)
for row in data['rows']:
a_dict = {row['allowed'][1]:"L"}
# a_dict is twiddling its thumbs here...
# until it's replaced by the next row's contents
...
它只会被for循环的下一行替换,直到你离开了 最后一行全部在" a_dict"中,因为最后一行当然没有被覆盖 任何东西。在你的样本中,将是:
{'E': 'L'}
接下来,您再次加载原始的json数据(但是,您不需要 - 它' s 仍在您的数据变量中,未经修改),并向其添加a_dict:
with open('test.json') as f:
data = json.load(f)
data.update(a_dict)
这让你知道:
{
"rows": [
{
"Company": "google",
"allowed": ["A", "B", "C"]
},
{
"Company": "Yahoo",
"allowed": ["D", "E", "F"]
}
],
"E": "L"
}
所以,要解决这个问题,你需要:
指出正确的'允许' index(在你的情况下,那将是[2])和
修改行,而不是将它们复制出来并将它们合并回数据。
在for循环中,数据[' rows']中的每一行都指向数据中的值,因此您可以更新行的内容,并完成您的工作。
< / LI> 醇>我不清楚的一件事是你是否要更新所有行(通过循环遍历所有行),或者只更新第一行(如示例所需的输出所示)。
所以这里有一个样本修复,无论哪种情况都适用:
import json
modify_first_row_only = True
with open('test.json', 'r') as f:
data = json.load(f)
rows = data['rows']
if modify_first_row_only:
rows[0]['allowed'][2] = 'LOOK'
else:
for row in rows:
row['allowed'][2] = 'LOOK'
with open('test.json', 'w') as f:
json.dump(data, f, indent=2)