在Python中解析多个Json对象并合并为单个Json对象

在Python中解析多个Json对象并合并为单个Json对象,python,json,parsing,Python,Json,Parsing,我有一个包含多个JSON的字符串。我想将该字符串转换为单个json对象 比如说, 假设有以下输入 input = """ { "a" : { "x":"y", "w":"z" } } { "b" : { "v":"w", "z":"l" } } """ 预期输出为: 输出: { "a" : { "x":"y", "w":"z" } "b" : { "v":"w",

我有一个包含多个JSON的字符串。我想将该
字符串
转换为单个
json
对象

比如说,

假设有以下输入

input = """
{
 "a" : {
        "x":"y",
        "w":"z" 
    }
} 

{
"b" : {
       "v":"w",
       "z":"l"
   }
}
"""
预期输出为:
输出

{
"a" : {
       "x":"y",
       "w":"z"
   }

"b" : {
       "v":"w",
       "z":"l"
    }
}

如果我们把它们当作字典来用

>>> a = {'a':{'a':1}}
>>> b = {'b':{'b':1}}
我们可以简单地

>>> a.update(b)
>>> a

{'a': {'a': 1}, 'b': {'b': 1}}

建立分析每个字符的字典列表。还可以解析每一行

很有可能找到一个已经执行此功能的用户库,但还有一条路要走

import json

braces = []
dicts = []
dict_chars = []

for line in inp: # input is a builtin so renamed from input to inp
  char = line.strip()
  dict_chars.append(line)
  if '{' == char:
    braces.append('}')
  elif '}' == char:
    braces.pop()
  elif len(braces) == 0 and dict_chars:
    text = ''.join(dict_chars)
    if text.strip():
      dicts.append(json.loads(text))
    dict_chars = []
然后,合并列表中的词典

merged_dict = {}
for dct in dicts:
  merged_dict.update(dct)
将合并字典输出为带有缩进的json字符串

merged_output = json.dumps(merged_dict, indent=4)

如果一行以“{”开头,则可以查看字典的开头:

import json

input = """
{

 "a" : {

        "x":"y",

        "w":"z"

    }

}

{
"b" : {

       "v":"w",

       "z":"l"

   }

}"""

my_dicts = {}
start_dict = False
one_json = ''

for line in input.split('\n'):
    if line.startswith('{'):
        # check if we pass a json
        if start_dict:
            my_dicts.update(json.loads(one_json))
            one_json = ''
        else:
            start_dict = True

    one_json = f'{one_json}\n{line}'

# take the last json
my_dicts.update(json.loads(one_json))

print(my_dicts)
输出:

{'a': {'w': 'z', 'x': 'y'}, 'b': {'v': 'w', 'z': 'l'}}

该问题似乎根本不包括任何解决问题的尝试。请编辑该问题以显示您尝试了什么,并显示您遇到的特定障碍。有关详细信息,请参阅。您的输入似乎格式不正确。这是故意的吗?您预期的输出不是有效的JSON关于di的一些其他注意事项词典合并:
{'a': {'w': 'z', 'x': 'y'}, 'b': {'v': 'w', 'z': 'l'}}