Python 中扁平化 JSON 对象


JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式。它广泛用于 Web 应用程序中,用于在服务器和客户端之间传输数据。JSON 数据通常以嵌套格式出现,这可能难以操作。扁平化 JSON 对象涉及将复杂的层次结构 JSON 结构转换为更简单的结构。当分析 JSON 数据或将其转换为其他格式时,通常需要此过程。在本博文中,我们将探讨在 Python 中扁平化 JSON 对象的过程。

语法

Python 具有内置的 JSON 模块,该模块提供用于编码解码 JSON 数据的函数。

data= <json-data-here>
flattened_data = flatten(data, "_")

我们使用一个名为 flatten-json 的外部库来举例说明。使用以下命令安装它:

pip install flatten-json

算法

扁平化 JSON 对象的过程包括以下步骤:

  • 创建一个空字典来存储扁平化的数据。

  • 递归遍历 JSON 对象。

  • 如果值为字典,则对函数进行递归调用。

  • 如果值不是字典,则将键值对添加到步骤 1 中生成的字典中。

示例

考虑以下嵌套的 JSON 对象:

{
   "name": "John",
   "age": 30,
   "address": {
      "street": "123 Main St",
      "city": "New York",
      "state": "NY"
   }
}

我们可以使用以下 Python 代码扁平化此对象:

import json

def flatten_json(nested_json):
   flattened_json = {}

   def flatten(x, name=''):
      if type(x) is dict:
         for a in x:
            flatten(x[a], name + a + '_')
      else:
         flattened_json[name[:-1]] = x

   flatten(nested_json)
   return flattened_json

nested_json = {
   "name": "John",
   "age": 30,
   "address": {
      "street": "123 Main St",
      "city": "New York",
      "state": "NY"
   }
}

flattened_json = flatten_json(nested_json)

print(json.dumps(flattened_json, indent=4))

输出

{
   "name": "John",
   "age": 30,
   "address_street": "123 Main St",
   "address_city": "New York",
   "address_state": "NY"
}

解释

  • 创建 flatten json 函数,该函数接受嵌套的 JSON 对象作为输入并生成扁平化的 JSON 对象。

  • 为了保存扁平化的数据,该方法生成一个名为 flattened json 的空字典。

  • 然后定义一个名为flatten的内部函数,它接受两个参数:name,当前键前缀,以及 x,当前值。如果当前值为字典,则此函数将使用当前值和当前键前缀重复调用。

  • 如果当前值不是字典,则当前键值对将添加到 flattened json 字典中。

  • 最后,使用输入的 JSON 对象执行 flatten 方法并返回 flattened json 字典。

要扁平化此 JSON 对象,我们可以使用 flatten_json 库,如下所示:

import json
from flatten_json import flatten

json_data = """
{
   "id": 1,
   "name": "John",
   "age": 30,
   "friends": [
      {
         "id": 2,
         "name": "Jane",
         "age": 28
      },{
         "id": 3,
         "name": "Bob",
         "age": 35,
         "location": {
            "city": "New York",
            "state": "NY"
         }
      }
   ]
}
"""

# Convert JSON string to Python object
data = json.loads(json_data)

# Flatten JSON object
flattened_data = flatten(data, "_")

print(flattened_data)

输出

{'id': 1, 'name': 'John', 'age': 30, 'friends_0_id': 2, 
'friends_0_name': 'Jane', 'friends_0_age': 28, 'friends_1_id': 3, 
'friends_1_name': 'Bob', 'friends_1_age': 35, 
'friends_1_location_city': 'New York', 'friends_1_location_state': 
'NY'}

在这种情况下,flatten 函数已扁平化 JSON 对象,并使用指定的间隔符(在本例中为下划线 (_))分隔键。在组合父对象中的键和嵌套对象中的键之后,相应地设置值。

应用

扁平化 JSON 对象是 Web 开发、数据分析和机器学习中的一项常见任务。它有助于简化数据处理、降低复杂性并使数据更易于使用。扁平化 JSON 对象的一些具体应用包括:

  • 将 JSON 数据存储在关系数据库中

  • 使用 SQL 处理 JSON 数据

  • 使用机器学习算法分析 JSON 数据

  • 使用图表和图形可视化 JSON 数据

结论

扁平化 JSON 对象是一种有价值的方法,可以通过它使 JSON 数据结构更简单、更易于管理。还有其他一些额外的技术可用,而 Python 中的 flatten json 包提供了一种快速有效的方法来扁平化 JSON 数据。通过学习如何扁平化 JSON 对象,可以改进您的数据处理程序,并使您的应用程序更有效、更具可扩展性。

更新于: 2023年8月21日

4K+ 阅读量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.