【问题标题】:Parsing multiple Json objects and merging into a single json object in PythonPython中解析多个Json对象并合并成单个json对象
【发布时间】:2019-10-16 06:07:12
【问题描述】:

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

例如,

假设以下输入,

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

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

预期的输出将是:
输出

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

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

【问题讨论】:

标签: python json parsing


【解决方案1】:

如果我们把它们当作字典并有

>>> a = {'a':{'a':1}}
>>> b = {'b':{'b':1}}

我们可以简单

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

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

【讨论】:

    【解决方案2】:

    您可以利用这样一个事实,即您可以通过查看一行是否以 '{' 开头来查看字典何时开始:

    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'}}
    

    【讨论】:

      【解决方案3】:

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

      很有可能找到已经执行此功能的用户库,但这是一条路

      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)
      
      > print(merged_dict)
      {u'a': {u'x': u'y', u'w': u'z'}, u'b': {u'z': u'l', u'v': u'w'}}
      

      将合并后的字典输出为带缩进的 json 字符串。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 2016-04-30
        • 2016-02-25
        相关资源
        最近更新 更多