「Python系列」Python JSON数据解析

文章目录

    • 一、JSON数据解析
      • 1. 读取和解析JSON文件
      • 2. 字符串到Python对象的解析
      • 3. Python对象到JSON字符串的转换
      • 4. 错误处理
      • 5. JSON数据的格式化输出
    • 二、Python 编码为 JSON 类型转换对应表
    • 三、JSON简介
    • 四、相关链接

一、JSON数据解析

在Python中解析JSON数据通常使用json模块。json模块提供了将JSON格式的数据转换为Python对象(如列表、字典等)以及将Python对象转换为JSON格式的数据的方法。

下面是一些使用json模块解析JSON数据的常见方法:

1. 读取和解析JSON文件

如果JSON数据存储在文件中,你可以使用json.load()函数来读取和解析文件内容。

import json# 打开JSON文件并读取内容
with open('data.json', 'r') as file:data = json.load(file)# 现在data是一个Python对象(列表或字典),你可以像操作普通Python对象一样操作它
print(data)

2. 字符串到Python对象的解析

如果JSON数据是字符串格式的,你可以使用json.loads()函数来解析它。

import json# JSON字符串
json_string = '{"name": "John", "age": 30, "city": "New York"}'# 将JSON字符串解析为Python字典
data = json.loads(json_string)# 访问解析后的数据
print(data['name'])  # 输出: John

3. Python对象到JSON字符串的转换

如果你想将Python对象转换为JSON格式的字符串,可以使用json.dumps()函数。

import json# Python字典
data = {'name': 'John','age': 30,'city': 'New York'
}# 将Python字典转换为JSON字符串
json_string = json.dumps(data)# 输出JSON字符串
print(json_string)  # 输出: {"name": "John", "age": 30, "city": "New York"}

4. 错误处理

在解析JSON数据时,如果数据格式不正确,json.load()json.loads()会抛出json.JSONDecodeError异常。为了处理这种情况,你可以使用try...except语句来捕获异常。

import jsontry:with open('data.json', 'r') as file:data = json.load(file)
except json.JSONDecodeError as e:print(f"解析JSON时出错: {e}")

5. JSON数据的格式化输出

当你需要将JSON数据以美观的格式输出时,可以使用indent参数。

import jsondata = {'name': 'John','age': 30,'city': 'New York'
}# 以美观的格式输出JSON字符串
json_string = json.dumps(data, indent=4)print(json_string)

输出将是格式化后的JSON字符串:

{"name": "John","age": 30,"city": "New York"
}

以上就是在Python中解析JSON数据的基本方法。通过这些方法,你可以轻松地处理JSON格式的数据。

二、Python 编码为 JSON 类型转换对应表

在Python中,将数据类型编码为JSON格式时,Python的内置类型会与JSON类型之间有一个自然的映射关系。以下是Python数据类型和JSON类型之间的对应关系:

Python 类型JSON 类型示例
dictJSON object{"name": "John"}
listJSON array["apple", "banana"]
strJSON string"Hello, world!"
int, floatJSON number42, 3.14
boolJSON booleanTrue, False
NoneJSON nullnull

当使用json.dumps()函数将Python对象转换为JSON字符串时,Python会自动根据这些规则进行类型转换。同样地,当使用json.loads()函数将JSON字符串解析为Python对象时,也会根据这些规则进行反序列化。

需要注意的是,一些Python对象类型(如自定义类、集合、日期等)在默认情况下并不能直接转换为JSON类型。对于这些类型,你需要自定义序列化函数或使用第三方库(如pendulummarshmallow)来处理它们的JSON转换。

例如,自定义类通常需要实现一个to_dict()方法,该方法将类的实例转换为可以序列化为JSON的字典。对于日期对象,你可以使用datetime模块中的isoformat()方法来获得ISO 8601格式的字符串,这个字符串可以直接被转换为JSON字符串。

以下是一个自定义类转换为JSON的示例:

import json
from datetime import datetimeclass Person:def __init__(self, name, birthdate):self.name = nameself.birthdate = birthdatedef to_dict(self):return {'name': self.name,'birthdate': self.birthdate.isoformat()}# 创建一个Person对象
person = Person('John Doe', datetime(1980, 1, 1))# 将对象转换为字典
person_dict = person.to_dict()# 将字典转换为JSON字符串
json_string = json.dumps(person_dict)print(json_string)

输出将是:

{"name": "John Doe", "birthdate": "1980-01-01T00:00:00"}

在这个例子中,Person类有一个to_dict()方法,它返回一个可以被json.dumps()直接处理的字典。birthdate属性被转换为ISO 8601格式的字符串,这是一个JSON兼容的日期格式。

三、JSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

JSON 的结构基于以下两种类型:

  1. 值(Value):

    • 字符串(在双引号中)
    • 数字(整数或浮点数)
    • 对象(在花括号中)
    • 数组(在方括号中)
    • 布尔值(truefalse
    • null
  2. 数据类型:

    • 字符串:由双引号包围的任意数量的 Unicode 字符。
    • 数字:整数或浮点数。
    • 对象:无序的键值对集合,键是字符串,值可以是任意类型的 JSON 值。
    • 数组:有序的值的集合,值可以是任意类型的 JSON 值。
    • 布尔值:truefalse
    • null:表示空值或“无”值。

JSON 示例:

{"name": "John","age": 30,"city": "New York","isStudent": false,"subjects": ["Math","Science","English"],"address": {"street": "123 Main St","city": "New York","state": "NY","postalCode": "10001"}
}

在这个示例中:

  • "name", "age", "city", "isStudent" 是键,它们的值分别是字符串、数字、字符串和布尔值。
  • "subjects" 是一个数组,包含三个字符串元素。
  • "address" 是一个对象,包含街道、城市、州和邮政编码等键值对。

JSON 的特点:

  • 易于阅读: JSON 的格式清晰且结构化的方式使得数据易于人类阅读和理解。
  • 易于编写和解析: 多种编程语言都有库或内置函数来解析和生成 JSON 数据。
  • 数据交换: 由于其通用性,JSON 是一种理想的数据交换格式,可以在不同的系统和服务之间轻松交换数据。
  • 语言无关: JSON 是一种语言无关的数据格式,这意味着任何能够处理文本的程序都可以处理 JSON。

JSON 的使用场景:

  • Web 服务与客户端之间的数据交换(如 AJAX 请求)。
  • 配置文件的存储和读取。
  • 数据持久化(如存储到本地文件或数据库中)。
  • 跨平台应用程序之间的数据交换。

由于 JSON 的简洁性和通用性,它已经成为 Web 开发中非常流行的数据交换格式。

四、相关链接

  1. Python下载安装中心
  2. Python官网
  3. Python软件下载
  4. 「Python系列」Python简介及案例
  5. 「Python系列」Python基础语法/数据类型
  6. 「Python系列」Python解释器
  7. 「Python系列」Python运算符
  8. 「Python系列」Python数据结构
  9. 「Python系列」Python元组
  10. 「Python系列」Python集合
  11. 「Python系列」Python列表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE中引入外部jquery.min.js文件

jquery官网&#xff1a;https://jquery.com/ cdn链接&#xff1a;https://code.jquery.com/jquery-3.7.1.js <template><div class"">测试jq<div id"jq">这是一个盒子</div></div> </template><script> import…

再次委托|工科背景老师赴美国斯坦福大学自费访学

工科背景的I老师&#xff0c;几年前曾通过我们获得美国哈佛大学医学院的无薪博士后职位&#xff0c;从事医工交叉学科研究。回国完成2年服务期后&#xff0c;I老师再次委托并仍希望去美国顶尖高校&#xff0c;最终我们落实了世界名校斯坦福大学的访问学者职位&#xff0c;满足了…

网络安全的重要性及SASE在企业中的应用

在信息技术日益发展的今天&#xff0c;网络安全已经成为企业不可忽视的重要议题。然而&#xff0c;仍有部分企业对网络安全的重视程度不够&#xff0c;这种疏忽可能会给企业带来严重的后果。 1. 数据泄露的风险 数据是现代企业的核心资产之一。如果企业不重视网络安全&#x…

跨境外贸自动评论脚本开发常用代码!

随着跨境电商的兴起&#xff0c;自动化评论成为了提升销售和客户满意度的重要工具&#xff0c;通过编写自动评论脚本&#xff0c;商家可以快速地在各个平台留下正面评价&#xff0c;提高产品的曝光率和信誉度。 本文将介绍跨境外贸自动评论脚本开发的一些常用代码&#xff0c;…

RabbitMq:RabbitMq 主从镜像模式②

一、模式思想 所有的技术设计思想&#xff0c;基本都在两点上下功夫&#xff1a;1. 生产力上 2. 稳定性上 二、集群模式 今天又有人问起来rabbitmq的高可用方式&#xff0c;因为和常见的主从模式有点区别&#xff0c;所以就记录一下。 rabbitmq集群的镜像队列提供了更高级的主…

【前沿热点视觉算法】-视觉识别的统一卷积和自我注意

计算机视觉算法分享。问题或建议&#xff0c;请文章私信或者文章末尾扫码加微信留言。 1 论文题目 视觉识别的统一卷积和自我注意 2 论文摘要 由于大量的局部冗余和复杂的全局依赖性&#xff0c;从图像和视频中学习区别表示是一项具有挑战性的任务。卷积神经网络&#xff08…

算法沉淀——动态规划之路径问题(leetcode真题剖析)

算法沉淀——动态规划之路径问题 01.不同路径02.不同路径 II03.珠宝的最高价值04.下降路径最小和05.最小路径和06.地下城游戏 01.不同路径 题目链接&#xff1a;https://leetcode.cn/problems/unique-paths/ 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图…

SpringMVC 学习(七)之报文信息转换器 HttpMessageConverter

目录 1 HttpMessageConverter 介绍 2 RequestBody 注解 3 ResponseBody 注解 4 RequestEntity 5 ResponseEntity 6 RestController 注解 1 HttpMessageConverter 介绍 HttpMessageConverter 报文信息转换器&#xff0c;将请求报文&#xff08;如JSON、XML、HTML等&#x…

【HarmonyOS】鸿蒙开发之Stage模型-应用配置文件——第4.2章

Stage模型-应用配置文件 AppScope -> app.json5&#xff1a;应用的全局配置信息entry&#xff1a;OpenHarmony工程模块&#xff0c;编译构建生成一个HAP包 build&#xff1a;用于存放OpenHarmony编译生成的hap包src -> main -> ets&#xff1a;用于存放ArkTS源码src …

每日一题——LeetCode1512.好数对的数目

方法一 暴力循环 var numIdenticalPairs function(nums) {let ans 0;for (let i 0; i < nums.length; i) {for (let j i 1; j < nums.length; j) {if (nums[i] nums[j]) {ans;}}}return ans; }; 消耗时间和内存情况&#xff1a; 方法二&#xff1a;组合计数 var …

msvcr110.dll找不到怎么修复?多种解决msvcr110.dll缺失方法分析

面对如“程序无法启动&#xff0c;因为电脑中缺失msvcr110.dll”这样的错误提示时&#xff0c;你的日常工作或游戏娱乐很可能会被迫暂停。这种问题在Windows用户中相当普遍&#xff0c;它们来源于某些共享的系统文件缺失。不过&#xff0c;好消息是解决此类错误通常并非困难任务…

SpringCloud Alibaba 2022之Nacos学习

SpringCloud Alibaba 2022使用 SpringCloud Alibaba 2022需要Spring Boot 3.0以上的版本&#xff0c;同时JDK需要是17及以上的版本。具体的可以看官网的说明。 Spring Cloud Alibaba版本说明 环境搭建 这里搭建的是一个聚合项目。项目结构如下&#xff1a; 父项目的pom.xm…

防御保护第六次作业整理笔记

DPI DPI --- 深度包检测技术 --- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对数据包的内容进行识别。&#xff08;应用层&#xff09; 1&#xff0c;基于“特征字”的检测技术 --- 最常用的识别手段&#xff0c;基于…

Springboot--整合定时任务quartz--集群篇

文章目录 前言一、quartz 的集群&#xff1a;1.1 服务集群带来的定时任务问题&#xff1a;1.2 服务集群定时任务解决思路&#xff1a; 二、quartz 集群实现&#xff1a;2.1 引入jar2.2 配置文件&#xff1a;2.3 定义quartz 数据源&#xff1a;2.4 集群测试&#xff1a;2.4.1 定…

【管理咨询宝藏资料25】某能源集团五年发展战略报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏资料25】某能源集团五年发展战略报告 【关键词】战略规划、五年战略、管理咨询 【文件核心观点】 - LL应以快速做大做强为目标&#xff0c;专注…

百能正式加入星闪联盟,助力无线通信技术发展

星闪联盟于2020年9月22日正式成立&#xff0c;是一个由国家级标准研究机构、行业领军企业、产业链合作伙伴等组成的开放式合作平台。该联盟致力于推动新一代无线短距通信技术SparkLink的创新和产业生态发展&#xff0c;以满足智能汽车、智能家居、智能终端和智能制造等快速发展…

Escalate_Linux-环境变量劫持提权(5)

环境变量劫持提权 在Shll输入命令时&#xff0c;Shel会按PAH环境变量中的路径依次搜索命令&#xff0c;若是存在同名的命令&#xff0c;则执行最先找到的&#xff0c;若是PATH中加入了当前目录&#xff0c;也就是“”这个符号&#xff0c;则可能会被黑客利用&#xff0c;例如在…

linux操作系统期末练习题

背景&#xff1a; 一、远程登录 1&#xff0e;利用远程登录软件&#xff0c;以用户userManager(密码123456)&#xff0c;远程登录教师计算机&#xff08;考试现场给出IP地址&#xff09;&#xff0c;只有操作&#xff0c;没有命令。 2&#xff0e;以stu班级学生个人学号后3位…

Webserver解决segmentation fault(core dump)段错问问题

前言 在完成了整个项目后&#xff0c;我用make命令编译了server&#xff0c;当我运行./server文件时&#xff0c;出现了段错误 在大量的代码中找出错因并不是一件容易的事&#xff0c;尤其是对新手程序员来说。而寻找bug的过程就像是侦探调查线索追查凶手一样&#xff0c;我们…

【软件测试】--功能测试2--常用设计测试用例方法

一、解决穷举场景 重点&#xff1a;使用等价类划分法 1.1 等价类划分法 重点&#xff1a;有效等价和单个无效等价各取1个即可。 步骤&#xff1a;1、明确需求2、确定有效和无效等价3、根据有效和无效造数据编写用例 1.2 案例&#xff08;qq合法验证&#xff09; 需求&#xff…