Python标准库 --- json库

news2024/12/27 13:55:48

目录

一、简介

二、属性

三、数据格式


一、简介

Json,全称JavaScript Object Notation,也就是JavaScript对象标记,通过对象和数组的组合表示数据,虽然构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。现在也常用于http请求中,所以对json的各种学习,是自然而然的事情。

二、属性

主要用于将python对象编码为json格式输出或存储,以及将json格式对象解码为python对象。

方法解释
json.dump()传入一个python对象,将其编码为json格式后存储到IO流中
json.dumps()传入一个python对象,将其编码为json格式后存储到str中
json.load()传入一个json格式的文件流,将其编码为python对象
json.loads()传入一个json格式的str,将其编码为python对象

1.json.loads()

用法:传入一个json格式的str,将其编码为python对象

eg:

一段 JSON 形式的字符串,它是 str 类型,我们用 json.loads转换成python的数据结构,变成列表或字典,这样我们就能进行操作了。

import json

data = '''
[{
    "name": "小明",
    "height": "170",
    "age": "18"
}, {
     "name": "小红",
    "height": "165",
    "age": "20"
}]
'''

# 打印data类型
print(type(data))
# json类型的数据转化为python类型的数据
new_data = json.loads(data)
# 打印data类型
print(type(new_data))

运行结果:

 这样来我们就可以用索引获取对应的内容了,例如想要获取第一个元素里的name属性,可以使用如下方式:

import json

data = '''
[{
    "name": "小明",
    "height": "170",
    "age": "18"
}, {
     "name": "小红",
    "height": "165",
    "age": "20"
}]
'''

# json类型的数据转化为python类型的数据
new_data = json.loads(data)
# 获取内容
name = new_data[0]['name']
new_name = new_data[0].get('name')
# 打印转换后data类型

print(name)
print(new_name)

运行结果:

2.json.load()

用法:传入一个json格式的文件流,将其编码为python对象

eg:

load方法操作的是整个文件对象,这里是将整个整个文件对象里面的内容转化为json对象。(下图是文件操作对象)

import json

# 构建该文件的文件对象
with open('test1.json',encoding='utf-8')as fp:
    # 加载垓文件对象,转换为python类型的数据
    pyth_list = json.load(fp)
    print(pyth_list)
    print(type(pyth_list))
    print(type(pyth_list[0]))


运行结果:

2.json.dumps()

把python类型的数据转换成json字符串

在这里插入图片描述

 dumps函数

import json

data = '''
[{
    "name": "小明",
    "height": "170",
    "age": "18"
}, {
     "name": "小红",
    "height": "165",
    "age": "20"
}]
'''

# 打印要来data类型
print(type(data))
# json类型的数据转化为python类型的数据
new_data = json.loads(data)

# 把python类型的数据转换成json字符串
lit = json.dumps(new_data)

# 打印转换后data类型
print(type(new_data))

print(type(lit))

运行结果:

其实loads和dumps的用法都是一致的,loads是将json类型的数据转化为python类型的数据,而dumps是将json类型的数据转化为python类型的数据。相当于一个是编码一个是解码。

2.json.dump()
把python类型的数据以json格式储存到文件中

在这里插入图片描述

eg:

为了输出中文,还需要指定参数 ensure_ascii 为 False

我们发现一个问题,就是转成json字符串之后,中文显示是乱码。
这个是因为json在进行序列化时,默认使用的是编码是ASCII,而中文为Unicode编码,ASCII中不包含中文,所以出现了乱码。
想要json.dumps()能正常显示中文,只要加入参数ensure_ascii=False即可,这样json在序列化的时候,就不会使用默认的ASCII编码。

三、数据格式

一个 JSON 对象可以写为如下形式:

[{
    "name": "小明",
    "height": "170",
    "age": "18"
}, {
     "name": "小红",
    "height": "165",
    "age": "20"
}]

由中括号包围的就相当于列表类型,列表中的每个元素可以是任意类型,这个示例中它是字典类型,由大括号包围。

JSON 可以由以上两种形式自由组合而成,可以无限次嵌套,结构清晰,是数据交换的极佳方式。

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

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

相关文章

ftp-vsftpd(Centos)

一.关闭selinux跟防火墙 setenforce 0 systemctl stop firewalld 二.安装vsftpd yum install vsftpd -y 三.创建虚拟用户与目录并申请证书 mkdir /webdata 根目录 chmod 777 /webdata/ useradd webadmin 上传的文件映射为webadmin vim user webuser虚拟用户 通过d…

Android---内存泄漏检测核心原理

目录 LeakCanary 核心原理 LeakCanary 检测对象的类型 ReferenceQueue 与 WeakReference LeakCanary 里的监控列表与保留列表 常见内存泄漏案例 1. 单例导致内存泄漏 2. 静态变量导致内存泄漏 3. 非静态内部类导致内存泄漏 4. 未取消注册或回调导致内存泄漏 5. Timer…

paddleocr 实操笔记 (前向后梳理)

要点: 参考: 基于PaddleOCR的数字显示器字符识别 工业仪表数值识别 前言 问题分析 要处理电表中的数据,可以分为步骤,拆解为以下问题: 感兴趣区域定位问题OCR读数问题 针对问题1,经过实验与探索,也找到…

黑马---Redis入门到实战【基础篇】

一、初识Redis 认识NoSql redis是键值数据库,没有表、没有约束,存的都是键值对,称为NoSql数据 NoSQL VS SQL 认识Redis Redis诞生于2009年,全称Remote Dictionary Server,远程词典服务器,是一个基于内存…

开篇:为什么学习 Go 语言

简介 Go 语言又称 Golang,由 Google 公司于 2009 年发布,近几年伴随着云计算、微服务、分布式的发展而迅速崛起,跻身主流编程语言之列,和 Java 类似,它是一门静态的、强类型的、编译型编程语言,为并发而生…

高等数学笔记(上下)

目录 不定积分定积分微分方程线性微分方程解的结构常系数齐次线性微分方程常系数齐次线性微分方程特解的求法 计算机解法 不定积分 第一类换元积分法:灵感来自于复合函数的求导,利用中间变量替换得到复合函数的积分法:设 f ( u ) f(u) f(u)具…

【Redis7】Redis7 事务管道发布订阅

【大家好,我是爱干饭的猿,本文重点介绍Redis7 事务、管道和发布订阅。 后续会继续分享Redis7和其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇文章:《【Redis7】Redis7 持…

Qt扫盲-QXYSeries理论总结

QXYSeries理论总结 一、概述二、常用函数介绍1. 维护点2. 绘图相关3. 绘制标签 三、信号说明1. Point 增删相关2. Point 鼠标相关3. 图变化相关 一、概述 QXYSeries 类是折线图、曲线图、散点图的基类。这个类其实就是维护的是图线的相关信息,就比如是这个线条的颜…

5、cmake的简单认识及CMakeLists.txt的编写语法

文章目录 1、cmake是什么(1)cmake的两大功能 2、CMakeLists.txt常用命令(即如何编写CMakeLists.txt文件)(1)cmake常见预定义1)常见的预定义变量2)系统信息预定义变量3)开…

开发者笑疯了! LLaMa惊天泄露引爆ChatGPT平替狂潮,开源LLM领域变天

来源: 新智源 微信号:AI-era Meta的LLaMA模型开源,让文本大模型迎来了Stable Diffustion时刻。谁都没想 谁能想到,一次意外的LLaMA泄漏,竟点燃了开源LLM领域最大的创新火花。 一系列表现出色的ChatGPT开源替代品——「羊驼家族」…

Linux系统网络传输之端口详解

Linux系统网络传输之端口详解 1、端口的概念2、安装namp3、查看端口占用情况4、安装net-tools5、查看指定端口占用情况 1、端口的概念 计算机程序之间的通讯,通过IP只能锁定计算机,但是无法锁定具体的程序。通过端口可以锁定计算机上具体的程序&#xf…

《花雕学AI》深度测试ChatGPT国内镜像站:超简单提示词的猫娘角色扮演,真的好神奇啊!

偶然看过一篇讲解如何使用ChatGPT调教猫娘的文章,有六个步骤,许许多多的调教提示语,让我感觉这是一件非常复杂与专业的事情。今天有空,于是就想先从简单的开始尝试一下。我使用了最简单的提示词:”ChatGPT角色扮演猫娘…

分布式事务Seata实践入门

1 前言 现在应用基本上都是分布式部署,那么针对分布式事务问题,也有对应的解决方案。经过简单的调研,最后选择了阿里的 Seata 组件,来实现分布式事务。 Seata是2019年1月份,蚂蚁金服和阿里巴巴共同开源的分布式事务解…

(TinkSystem SR650)安装服务器操作系统(Windows Server 2022)步骤和相关概念

(TinkSystem SR650)安装服务器操作系统(Windows Server 2022)步骤和相关概念 服务器操作系统安装步骤 记录一下服务器操作系统安装过程,虽然简单但还是有一些坑需要注意,本次使用的是联想服务器ThinkSyst…

VS2019中Ctrl+左键不起作用和控制台不驻留(cmd窗口闪退)

1、关于Ctrl左键不起作用 解决:在线装个插件就行。 工具>>扩展和更新 联机>>VS库>>所搜插件“GO TO Definition” 安装,重启VS即可。 2、关于控制台不驻留 当然这个问题解决方案有很多,这个是首选吧

[Java·算法·中等]LeetCode105. 从前序与中序遍历序列构造二叉树

每天一题,防止痴呆 前言题目示例分析思路1题解1分析思路2题解2 👉️ 力扣原文 前言 二叉树前序遍历的顺序为: 先遍历根节点; 随后递归地遍历左子树; 最后递归地遍历右子树。 二叉树中序遍历的顺序为: 先递…

HCIP-6.9BGP路由反射器原理与配置

路由反射器原理与配置 1、路由反射器概念1.1、路由反射器原理:1.2、多集群路由反射器1.3、备份路由反射器2、路由反射器配置3、路由反射器防环机制 1、路由反射器概念 IBGP的水平分割,IBGP 1只能update一跳,就是说在IBGP 2 设备收到IBGP 1设…

【RocketMQ】事务的实现原理

事务的使用 RocketMQ事务的使用场景 单体架构下的事务 在单体系统的开发过程中,假如某个场景下需要对数据库的多张表进行操作,为了保证数据的一致性,一般会使用事务,将所有的操作全部提交或者在出错的时候全部回滚。以创建订单…

12-RabbitMQ

一 RabbitMQ概念 1 MQ 消息队列 MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于系统之间的异步通信。 同步通信相当于两个人当面对话,你一言我一语。必须及时回复 异步通信相当于通过第三方转述对…

ObjectBox一种基于中心点的无锚点目标检测方法

ObjectBox: From Centers to Boxes for Anchor-Free Object Detection 论文地址:https://arxiv.org/pdf/2207.06985.pdf 官方代码:https://github.com/MohsenZand/ObjectBox 基于中心点的无锚点目标检测方法是一种目标检测方法,其思路是将目…