当前位置: 首页 > article >正文

当你爬着数据,程序突然报JSON格式化异常...(论如何修复异常的JSON)

引文

日常数据采集容易遇到异常的JSON数据,如:
括号不闭合{"profile": {"name": "xx", "age": 20}
没有引号{name: python, age: 20, salary: "python, }
反斜杠异常{"name": "python", "age": 20, "salary: "\"python\\""}
等等等等,之前基本都是使用正则匹配的方式提取关键文本,但是过于耗费时间了。

JSON-Repair

JSON-Repair是一个用于修复损坏或无效的JSON数据的库。它可以帮助你解决由于格式错误、缺失标记或其他问题导致的JSON数据无法解析的问题。

  1. 安装json-repair库:
    使用以下命令在你的Python环境中安装json-repair库:

    pip install json-repair
    
  2. 导入json-repair库:

    import json_repair
    
  3. 接口使用:
    json_repair提供了loads接口来加载异常数据

     invalid_json = '[{"name": "John", "age": 25}, {"name": "Mike", "age": 30]'
     repaired_json = json_repair.loads(invalid_json)
    
  4. 错误处理:
    如果JSON数据无法修复,repair函数将引发一个json_repair.JsonRepairError异常。你可以使用try-except语句来处理该异常并执行相应的操作。下面是一个示例代码:

    json_data = '{"name": "John", "age: 30, "city": "New York"}'
    try:
        repaired_json = json_repair.loads(json_data)
        print(repaired_json)
    except json_repair.JsonRepairError as e:
        print(f"JSON repair failed: {e}")
    
  5. 进一步的修复选项:
    json-repair库还提供了其他修复选项,例如指定修复级别、指定修复策略等。你可以在json_repair的文档中查找更多细节,并根据你的需求进行相应的配置。

使用案例:

  1. 解析无效的JSON数据:
import json_repair

invalid_json = '[{"name": "John", "age": 25}, {"name": "Mike", "age": 30]'
parsed_data= json_repair.loads(invalid_json)
print(parsed_data)

在这里插入图片描述

  1. 修复缺失的JSON标记:
import json_repair

missing_token_json = '{"name": "John", "age": 25, "city": "New York"}'
parsed_data= json_repair.loads(missing_token_json)
print(parsed_data)

在这里插入图片描述

  1. 修复格式错误的JSON数据:
import json_repair

malformed_json = '{name: "John", age: 25, city: "New York"}'
parsed_data= json_repair.loads(malformed_json)
print(parsed_data)

在这里插入图片描述


http://www.kler.cn/a/447478.html

相关文章:

  • 【Android】unzip aar删除冲突classes再zip
  • 免费送源码:Java+ssm++MVC+HTML+CSS+MySQL springboot 社区医院信息管理系统的设计与实现 计算机毕业设计原创定制
  • Swin transformer 论文阅读记录 代码分析
  • 2023年下半年软考信息安全工程师案例分析及答案解析
  • EMMC , UFS, SSD介绍
  • UE5喷涂功能
  • HarmonyOS NEXT 技术实践-基于基础视觉服务实现骨骼点识别
  • Java CountDownLatch 用法和源码解析
  • 3354. 使数组元素等于零
  • 基于Transformer的自编码器模型在故障检测中的应用
  • springmvc的拦截器,全局异常处理和文件上传
  • 蓝桥杯 2024 国 B【选数概率】(AC)
  • 【java面向对象编程】第六弹----封装、继承、多态
  • Androidstudio点击按钮播放声音
  • 如何优雅的关闭GoWeb服务器
  • RK3588 , mpp硬编码yuv, 保存MP4视频文件.
  • TDesign:NavBar 导航栏
  • 未来趋势系列 篇五:自主可控科技题材解析和股票梳理
  • SpringCloud微服务开发(六)ElasticSearch/RESTful风格
  • 如何在Qt中应用html美化控件
  • 进入 Cosmic Red:第十周游戏指南
  • Linux中的mv命令深入分析
  • RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索
  • 如何深入学习JVM底层原理?
  • 火山引擎声音复刻API-2.0
  • 【从零开始入门unity游戏开发之——C#篇18】C#面向对象的封装——构造函数、`this()`构造函数链、析构函数(方法)