📜  在Python中展平 JSON 对象

📅  最后修改于: 2022-05-13 01:54:40.582000             🧑  作者: Mango

在Python中展平 JSON 对象

JSON(JavaScript Object Notation)是一种数据交换格式,它是人类可读的文本,用于传输数据,尤其是在 Web 应用程序和服务器之间。 JSON 文件将类似于Python中的嵌套字典。要将文本文件转换为 JSON, Python中有一个json模块。该模块内置Python标准模块,因此无需外部安装。

扁平化的 json 什么都不是,但不存在嵌套,只存在键值对。

例子:

需要扁平化 JSON

需要扁平化 JSON 的原因有很多,例如为了更好和更易于理解的视图,即只有键值对存在而没有任何嵌套。它还允许以可读但更详细的方式实现特定于上下文的安全性和约束。

扁平化 JSON 的方法

有很多方法可以扁平化 JSON。使用json-flatten库有一种递归方式和另一种方式。

  • 递归方法:
  • 现在我们可以通过递归的方法来展平字典数组,这很容易理解。递归方法比使用json-flatten库要慢一些。

    例子:

    # for a array value of a key
    unflat_json = {'user' :
                   {'Rachel':
                    {'UserID':1717171717,
                    'Email': 'rachel1999@gmail.com', 
                    'friends': ['John', 'Jeremy', 'Emily']
                    }
                   }
                  }
      
    # Function for flattening 
    # json
    def flatten_json(y):
        out = {}
      
        def flatten(x, name =''):
              
            # If the Nested key-value 
            # pair is of dict type
            if type(x) is dict:
                  
                for a in x:
                    flatten(x[a], name + a + '_')
                      
            # If the Nested key-value
            # pair is of list type
            elif type(x) is list:
                  
                i = 0
                  
                for a in x:                
                    flatten(a, name + str(i) + '_')
                    i += 1
            else:
                out[name[:-1]] = x
      
        flatten(y)
        return out
      
    # Driver code
    print(flatten_json(unflat_json))
    

    输出 :

  • 使用 flatten_json 库:json-flatten 库提供了将 JSON 对象展平为单个键值对并将该字典解展为 JSON 对象的函数。

    安装库

    为了使用 flatten_json 库,我们需要安装这个库。 flatten_json 可以通过在终端中运行以下命令来安装。

    pip install json-flatten

    例子:

    from flatten_json import flatten
      
    unflat_json = {'user' :
                   {'Rachel':
                    {'UserID':1717171717,
                    'Email': 'rachel1999@gmail.com', 
                    'friends': ['John', 'Jeremy', 'Emily']
                    }
                   }
                  }
      
    flat_json = flatten(unflat_json)
      
    print(flat_json)
    

    输出 :