python中实现json-repair快速修复损坏的JSON文件

 更新时间:2025年11月25日 09:26:44   作者:风华浪浪  
本文主要介绍了python中实现json-repair快速修复损坏的JSON文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、背景

  • 本人场景:大模型提示词要求返回json格式类型,但是却```json开头,以```结尾, 或者少引号等各种情况
  • 修复 JSON 中的语法错误
    缺少引号、错误放置的逗号、未转义的字符以及不完整的键值对。
    缺少引号、格式不正确的值(true、false、null)以及修复损坏的键值结构。
  • 修复格式错误的 JSON 数组和对象
    通过添加必要的元素(例如,逗号、括号)或默认值(null、“”)导致数组/对象不完整或损坏。
    该库可以处理包含额外非 JSON 字符(如注释或位置不正确的字符)的 JSON,并在保持有效结构的同时清理它们。
  • 自动完成缺失的 JSON 值
    自动使用合理的默认值(如空字符串或 null)完成 JSON 字段中缺失的值,确保有效性。

二、安装与参数

此库来完全替换json.loads()等

pip install json-repair
json_repair -h
usage: json_repair [-h] [-i] [-o TARGET] [--ensure_ascii] [--indent INDENT] [filename]

Repair and parse JSON files.

positional arguments:
  filename              The JSON file to repair (if omitted, reads from stdin)

options:
  -h, --help            show this help message and exit
  -i, --inline          Replace the file inline instead of returning the output to stdout
  -o TARGET, --output TARGET
                        If specified, the output will be written to TARGET filename instead of stdout
  --ensure_ascii        Pass ensure_ascii=True to json.dumps()
  --indent INDENT       Number of spaces for indentation (Default 2)

三、使用示例

少引号

from json_repair import repair_json, loads

json_string = repair_json("{'test_chinese_ascii':'统一码, }", ensure_ascii=False)
print(json_string)

{"test_chinese_ascii": "统一码"}

json_data = loads(json_string)
print(type(json_data), json_data)

<class 'dict'> {'test_chinese_ascii': '统一码'}

有时大模型提示词说返回jison格式类型,但是却```json开头,以```结尾, 或者少引号等各种情况

json_string = "```json{'username': 'zhangsan', 'age': 13, 'phone': 13312345678, 'description': 'hello world'}```"
repair_data = repair_json(json_string)
print(repair_data)

{"username": "zhangsan", "age": 13, "phone": 13312345678, "description": "hello world"}

json_data = loads(json_string)
print(type(json_data), json_data)

<class 'dict'> {'username': 'zhangsan', 'age': 13, 'phone': 13312345678, 'description': 'hello world'}

处理报错 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
序列化报错

import json
json_string = "{'start_row': 0, 'end_row': 0, 'env': 0, 'now': 0}"
json_data = json.loads(json_string)
print(json_data)

序列化正确

json_string = "{'start_row': 0, 'end_row': 0, 'env': 0, 'now': 0}"
json_data = loads(json_string)
print(type(json_data), json_data)

四、注意

避免这种反模式
这是很浪费的,因为json_repair它已经为您验证了 JSON 是否有效,
如果您仍然想这样做,那么请skip_json_loads=True按照下面部分所述添加到调用中

obj = {}
try:
    obj = json.loads(string)
except json.JSONDecodeError as e:
    obj = json_repair.loads(string)
    ...

使用中文字符需要添加ensure_ascii=False

repair_json("{'test_chinese_ascii':'统一码'}")
{"test_chinese_ascii": "\u7edf\u4e00\u7801"}
repair_json("{'test_chinese_ascii':'统一码'}", ensure_ascii=False)
{"test_chinese_ascii": "统一码"}

性能注意事项
如果你发现这个库因为正在使用而太慢,json.loads()你可以通过传递skip_json_loads=True给来跳过它repair_json

from json_repair import repair_json

good_json_string = repair_json(bad_json_string, skip_json_loads=True)

我选择不使用任何快速 json 库以避免任何外部依赖,以便任何人都可以使用它,无论他们的堆栈如何。

设置return_objects=True总是会更快,因为解析器已经返回一个对象,并且它没有将该对象序列化为 JSON
skip_json_loads只有当你 100% 确定该字符串不是有效的 JSON 时才会更快
如果您在转义时遇到问题,请将字符串作为**原始字**符串传递,例如:r"string with escaping\""

到此这篇关于python中实现json-repair快速修复损坏的JSON文件的文章就介绍到这了,更多相关python json-repair修复损坏JSON文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python打包代码成exe可执行文件的方法总结

    Python打包代码成exe可执行文件的方法总结

    将Python代码打包成可执行文件(.exe)是一种非常有效的解决方案,能够使用户无需安装Python环境即可直接运行程序,本文整理了一些常见的方法,希望对大家有所帮助
    2024-10-10
  • python3中宏HAVE_VFORK的使用

    python3中宏HAVE_VFORK的使用

    本文主要介绍了python3中宏HAVE_VFORK的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 基于Python os模块常用命令介绍

    基于Python os模块常用命令介绍

    下面小编就为大家带来一篇基于Python os模块常用命令介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 基于深度学习和OpenCV实现目标检测

    基于深度学习和OpenCV实现目标检测

    这篇文章主要介绍了通过使用OpenCV进行基于深度学习的对象检测以及使用OpenCV检测视频,文中的示例代码讲解详细,需要的可以参考一下
    2021-12-12
  • Python实现完整的事务操作示例

    Python实现完整的事务操作示例

    这篇文章主要介绍了Python实现完整的事务操作,结合实例形式分析了Python操作mysql数据库相关事务操作的具体流程与实现技巧,需要的朋友可以参考下
    2017-06-06
  • Python实现的归并排序算法示例

    Python实现的归并排序算法示例

    这篇文章主要介绍了Python实现的归并排序算法,简单描述了归并排序算法的原理,并结合实例形式分析了Python实现归并排序的具体操作技巧,需要的朋友可以参考下
    2017-11-11
  • Pandas时间数据处理详细教程

    Pandas时间数据处理详细教程

    日常工作中日期格式有多种表达形式,比如年份开头或是月份开头2022/6/4、6/4/2022等,通过pandas的日期数据处理,这篇文章主要给大家介绍了关于Pandas时间数据处理的相关资料,需要的朋友可以参考下
    2023-01-01
  • python 存储json数据的操作

    python 存储json数据的操作

    这篇文章主要介绍了python 存储json数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • 关于Python Selenium自动化导出新版WOS(web of science)检索结果的问题

    关于Python Selenium自动化导出新版WOS(web of science)检索结果的问题

    这篇文章主要介绍了Python Selenium自动化导出新版WOS(web of science)检索结果,本代码属于半自动化导出,考虑到开发效率等因素,有两处在首次导出时需要手动操作,具体实现过程跟随小编一起看看吧
    2022-01-01
  • Python告诉你木马程序的键盘记录原理

    Python告诉你木马程序的键盘记录原理

    今天小编就为大家分享一篇关于Python告诉你木马程序的键盘记录原理,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02

最新评论