在Python中解析多个Json对象并合并为单个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
对象
比如说,
假设有以下输入
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'}}