python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python JSON数据提取与转换

Python实现JSON数据提取与转换的命令行工具程序

作者:XLYcmy

这篇文章主要为大家详细介绍了如何使用Python实现JSON数据提取与转换的命令行工具程序,核心功能是从一个特定结构的 JSON 输入文件中提取特定数据并写入到一个新的 JSON 文件中,感兴趣的小伙伴可以了解下

一、 程序概述与核心功能

一个用于数据抽取与转换的命令行工具程序,其核心功能是自动化地从一个特定结构的 JSON 输入文件中读取数据,经过处理,将其中用户关心的部分(即 content字段的值)提取出来,并按照另一种结构写入到一个新的 JSON 输出文件中。

功能拆解如下:

从更高层次看,这个程序实现了一个简单的 ETL(Extract, Transform, Load)管道中的关键步骤:

二、 数据结构分析

程序的处理逻辑紧密依赖于输入和输出文件的 JSON 数据结构。下面进行详细剖析。

1. 输入数据结构 (extraction_checkpoint.json)

从代码逻辑反向推导,输入文件必须是一个有效的 JSON 文件,并且其结构需要满足特定约定,否则程序会报错或无法提取到数据。

示例化的输入数据结构可能如下:

{
  "extracted": [
    {
      "id": 1,
      "metadata": {"author": "Alice"},
      "content": "这是第一条需要提取的文本内容。"
    },
    {
      "id": 2,
      "metadata": {"author": "Bob"},
      "content": {"title": "第二条内容", "body": "这里可能是一个嵌套对象。"}
    },
    {
      "timestamp": "2023-10-27",
      "content": 42.5
    }
  ],
  "status": "completed",
  "other_field": "忽略此字段"
}

在上述示例中,程序会成功提取出三个 content的值:一个字符串、一个嵌套对象和一个浮点数。"status""other_field"等根层级的其他键会被忽略。

2. 输出数据结构 (outputs.json)

输出文件的结构由程序在 output_data变量中明确定义,相对简单。

对应于上述输入示例,输出文件内容将为:

{
  "outputs": [
    "这是第一条需要提取的文本内容。",
    {"title": "第二条内容", "body": "这里可能是一个嵌套对象。"},
    42.5
  ]
}

输出结构高度简洁,去除了所有元数据和其他字段,只保留了最核心的 content数据流。

三、 算法与流程控制

程序的算法是线性的、确定性的,主要包含一个顺序流程和一个循环遍历结构。我们可以将其视为一个简单的数据过滤和映射管道

算法步骤分解:

1.启动与入口:当脚本被直接运行时 (if __name__ == "__main__":),调用 main()函数,进入主流程。

2.异常处理框架:主流程被包裹在一个 try-except块中,这是程序的安全外壳,确保了程序在遇到常见错误时不会崩溃,而是能给出友好的错误信息。

3.文件读取与反序列化

4.数据提取(核心算法)

5.遍历与收集

6.数据序列化与写入

7.状态反馈:在控制台打印成功信息,包含提取的数量 (len(contents))。

8.异常处理:如果在上述任何步骤中发生 FileNotFoundErrorjson.JSONDecodeError或其他任何 Exception,程序会跳过正常流程,执行对应的 except块,在控制台打印相应的错误信息,并优雅终止。

算法特点总结

四、 代码实现细节与编程实践

模块导入import json。仅导入 Python 标准库中的 json模块,无任何外部依赖,保证了程序的可移植性和易于部署。

函数封装:逻辑被封装在 main()函数中,并通过 if __name__ == "__main__":进行调用。这是一种良好的实践,使得该脚本既可以作为独立程序运行,其核心函数又可以在未来被其他模块导入和调用(尽管当前 main()函数设计为独立运行)。

错误处理

文件操作

数据处理

用户反馈:成功时,使用 print输出提取的内容数量,提供了即时、明确的执行反馈。

五、 潜在应用场景与扩展性分析

1. 典型应用场景:

2. 扩展性建议:

当前程序功能单一且硬编码。为了提高其复用性和灵活性,可以考虑以下扩展方向:

六、 总结

一个结构清晰、功能聚焦、具备基本鲁棒性的 Python 实用脚本。它完美地诠释了 Unix 哲学中“做好一件事”的理念。其核心价值在于自动化了一个常见但繁琐的数据处理任务:从一个具有固定结构的嵌套 JSON 数据源中,批量提取指定字段。

程序在数据结构上,定义了从 {"extracted": [{"content": value}, ...]}{"outputs": [value, ...]}的转换规则。在算法上,它采用了经典的“读取-解析-遍历-提取-写入”线性流程,并通过异常处理机制增强了稳定性。在代码实现上,它遵循了 Python 的常见最佳实践,如使用上下文管理器、明确的编码、防御性编程等。

尽管目前其配置是硬编码的,但它作为一个功能原型或特定流水线中的一环,是完整且有效的。通过对其进行参数化和功能扩展,它可以轻松演进为一个功能更强大、适用范围更广的通用数据提取工具。

七、源代码

import json
def main():
    try:
        # 读取 extraction_checkpoint.json 文件
        with open('./extraction_checkpoint.json', 'r', encoding='utf-8') as f:
            data = json.load(f)
        # 提取所有content字段的值
        contents = []
        if "extracted" in data:
            for item in data["extracted"]:
                if "content" in item:
                    contents.append(item["content"])
        # 创建输出数据结构
        output_data = {
            "outputs": contents
        }
        # 写入 outputs.json 文件
        with open('outputs.json', 'w', encoding='utf-8') as f:
            json.dump(output_data, f, ensure_ascii=False, indent=2)
        print(f"成功生成 outputs.json 文件,共提取 {len(contents)} 个内容")
    except FileNotFoundError:
        print("错误:找不到 extraction_checkpoint.json 文件")
    except json.JSONDecodeError:
        print("错误:extraction_checkpoint.json 文件格式不正确")
    except Exception as e:
        print(f"发生错误:{str(e)}")
if __name__ == "__main__":
    main()

到此这篇关于Python实现JSON数据提取与转换的命令行工具程序的文章就介绍到这了,更多相关Python JSON数据提取与转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文