Py学习  »  Python

Python:如何向Json数组中的每个对象添加新的键值?

youhoome • 3 年前 • 1422 次点击  

如何向JSON数组中的每个对象添加一个新的键值对,如下所示?我尝试使用下面的代码,但结果是分开的,而不是在同一个原始数组中。

import json

json_var = '''{
"information" : {
  "info_id"          : "8878",
  "info_name"        : "Stackoverflow"
},

"env" : {
  "env_name"           : "UAT",
  "env_type"           : "Staging"
},

"services" : [
  {
    "service_name"         : "stack1",
    "service_version"     : "1"
  },
  {
    "service_name"         : "stack2",
    "service_version"     : "2"
  },  
  {
    "service_name"         : "stack3",
    "service_version"     : "3"
  }
 ]
}'''

y = {"pin":110096}
entry = json.loads(json_var)

for i in entry['services']:
      i.update(y)
      print(json.dumps(i))

实际产量:

{"service_name": "stack1", "service_version": "1", "pin": 110096}
{"service_name": "stack2", "service_version": "2", "pin": 110096}
{"service_name": "stack3", "service_version": "3", "pin": 110096}

预期产出:

[
{"service_name": "stack1", 
  "service_version": "1", 
  "pin": 110096
},
{"service_name": "stack2",
 "service_version": "2",
 "pin": 110096
},
{"service_name": "stack3",
 "service_version": "3",
 "pin": 110096
}
]

请告知如何修改上述代码或提供新代码以实现预期输出。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129001
文章 [ 1 ]  |  最新文章 3 年前
BrokenBenchmark
Reply   •   1 楼
BrokenBenchmark    3 年前

唯一的问题是你的位置 print() 陈述它应该在外面 for 循环,你应该打印 entry['services'] 而不是 i 。这允许您一次打印所有更新的条目,而不是一次打印一条。

y = {"pin":110096}
entry = json.loads(json_var)

for i in entry['services']:
    i.update(y)

print(json.dumps(entry['services']))

这将产生:

[{"service_name": "stack1", "service_version": "1", "pin": 110096},
{"service_name": "stack2", "service_version": "2", "pin": 110096},
{"service_name": "stack3", "service_version": "3", "pin": 110096}]