Python2.7使用两个JSON,将字符串字段值组合在一起并添加int字段

2024-05-21 22:03:55 发布

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

我尝试使用两个由整数和字符串混合组成的JSON,并使用python2.7将它们组合在一起。在

例如:

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

我要做的是:

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

基于上述内容,我希望输出是什么样子的示例:

^{pr2}$

另外,我使用这个工具的项目将在一台不能访问internet的机器上,所以如果可能的话,我需要它来使用标准的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对象传递到脚本的方式是数组的形式。所以数组将包含一系列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对象,并在最后合并它们。我知道这并不是最有效的方法,但是,我是新来的,正在使用已有的代码。在


Tags: 项目对象key代码json示例fieldfor
2条回答

将JSON转换为Python对象(dictionary),根据需要将Python对象(dictionary)再次转换为JSON。使用JSON标准模块。在

import json

# input JSON
json1 = '{"key": {"field_string": ["string"],"field_num": 1}}'
json2 = '{"key": {"field_string": ["another_string"],"field_num": 2}}'

# convert JSON to Python dictionary
dict1 = json.loads(json1)
dict2 = json.loads(json2)

# create dictionary for results
dict3 = {'key': {}}

# do what you need
dict3['key']['field_string'] = dict1['key']['field_string'] + dict2['key']['field_string']
dict3['key']['field_num'] = dict1['key']['field_num'] + dict2['key']['field_num']

# convert result to JSON
json3 = json.dumps(dict3)

print(json3)

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

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

它允许深度达到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)

输出:

^{pr2}$

相关问题 更多 >