gpt4 book ai didi

Python 2.7 - 获取两个 JSON 并将字符串字段值组合在一起并添加 int 字段

转载 作者:行者123 更新时间:2023-11-30 23:01:39 25 4
gpt4 key购买 nike

我试图获取两个由整数和字符串混合组成的 JSON,并使用 python 2.7 将它们组合在一起。

例如:

{"key": {"field_string": ["string"],"field_num": 1}}
{"key": {"field_string": ["another_string"],"field_num": 2}}

我想做的事情的要求是:

  • key 将相同,并且在合并后需要保持不变
  • 整数需要相加,因此 1 + 2 = 3,字符串需要以数组格式相加(它们已经在上面的数组中)。
  • 每个 JSON 的一系列字段,大多数 JSON 将具有 4-7 个字段

基于上述内容,我希望输出看起来像这样:

{"key": {"field_string": ["string","another_string"],"field_num": 3}}

另外,我使用它的项目将在一台无法访问互联网的机器上,所以如果可能的话,我需要它与标准 python 库一起使用。

如有任何帮助,我们将不胜感激。我发现的大多数示例都涉及将两个 JSON 对象组合在一起,但是,整数不会被添加,这是我需要发生的关键部分。

更新

有关此内容的更多背景信息,这是我正在开发的一个项目,我无法详细介绍后面的内容,但是,我可以提供一个伪代码示例。

我正在做的事情背后的基本想法是,我有很多 JSON 需要组合。在示例中,我只是将其列为两个,但是在我的代码的最终版本中,它将处理数千个 JSON(大数据项目)。它的 JSON 部分只是我想要完成的一小部分,但却是一个关键部分。

这里是一个 JSON 的结构示例:

{
"key1": {
"blue_data": 12,
"green_data": 0,
"red_data": [],
"yellow_Data": [
"string_1",
"string_2",
"string_3"
],
"foo": "XX",
"bar": "YYY",
"foobar": "ZZZZ"
}
}

但是,某些字段可能会被省略,例如最后 3 个字段可能会或可能不会被包含,或者它们的子集。

JSON 对象传递到我的脚本的方式是数组的形式。因此该数组将保存一系列我使用 for 循环迭代的 JSON。

for key in list_of_keys:
for item in json_list:
json_dump_data = json.loads(item)
try:
json_blue_data[key]
except:
json_blue_data[key] = int(json_dump_data["blue_data"])
else:
json_data_data[key] = json_blue_day[key] + int(json_dump_data["blue_data"])

我对每个值做了与上面类似的事情,我基本上将每个字段分解为一个 dict 对象并在最后将它们组合起来。我知道这不是最有效的方法,但是,我是新手,正在使用预先存在的代码。

最佳答案

这是假设所有键都具有相同的值类型。

它允许深度达到约 1000(默认的 Python 最大堆栈深度)

import json

obj1 = json.loads('{"key": {"field_string": ["string"],"field_num": 1}}')
obj2 = json.loads('{"key": {"field_string": ["another_string"],"field_num": 2}}')

def combine(obj1, obj2):
for k, v in obj1.items():
if k in obj2:
if isinstance(v, dict):
combine(obj1[k], obj2[k])
else:
# assume list or int based on problem description
obj1[k] = obj1[k] + obj2[k]


combine(obj1, obj2)
print json.dumps(obj1)

输出:

{"key": {"field_string": ["string", "another_string"], "field_num": 3}}

关于Python 2.7 - 获取两个 JSON 并将字符串字段值组合在一起并添加 int 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com