Python数据分析 只要1分钟 教你玩转JSON 全程干货
wxin55 2024-11-18 17:56 15 浏览 0 评论
Json 简介:
Json,全名 JavaScript Object Notation,JSON(JavaScript Object Notation(记号、标记))是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 (文末有惊喜)
JSON采用完全独立 于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。JSON易于人阅读和编写,同时也易于机器解析和生成。常用于 http 请求中,接口
数据类型
用Python处理json也很简单,Python自带有json模块。可以对python对象与json字符串进行相互转换。
python的常见内置数据类型有dict,tuple等,而在json中,数据类型有object,array等,在相互转换中,类型是一一对应的。在下表中的python数据类型才可以被转为json,集合set、字节byte不能转为json。
Python数据类型 | JSON数据类型 | 说明 |
dict | object | 都用花括号{}表示 |
list,tuple | array | JSON用中括号[]表示 |
str | string | JSON用双引号""表示 |
int,float | number | |
True | true | |
False | false | |
None | null |
json模块的主要4个函数。
方法 | 解释 |
json.dumps | 解析python对象为json字符串 |
json.dump | 解析python对象,输出到json文件 |
json.loads | 解析json字符串为python对象 |
json.load | 输入json文件,解析为python对象 |
json.dumps
json.dumps方法提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的),skipkeys(对于键不是基本类型Python字典键值对将被过滤),indent(格式化输出用的)等参数。还是举个例子:
>> python_obj2={"key2": [4, 5, 6], "key1": [1, 2, 3]}
>>> json_str2=json.dumps(python_obj2)
>>> json_str2=json.dumps(python_obj2,sort_keys=True,indent=2)
>>> print json_str2
{
"key1": [
>> python_obj2={"key2": [4, 5, 6], "key1": [1, 2, 3]}
>>> json_str2=json.dumps(python_obj2)
>>> json_str2=json.dumps(python_obj2,sort_keys=True,indent=2)
>>> print json_str2
{
"key1": [
1,
2,
3
],
"key2": [
4,
5,
6
]
}
>>> json_str2=json.dumps(python_obj2,sort_keys=False,indent=2)
>>> print json_str2
{
"key2": [
4,
5,
6
],
"key1": [
1,
2,
3
]
}
在python中解析python对象为json字符串,使用json.dumps方法。其中indent参数表示缩进,可以优化json输出格式。
yimport json
# 创建python list对象
obj = [{'a': 1, 'b': {'aa': 11, 'bb': 22}}, {'b': (False,True,None)}]
# 解析python对象,设置缩进
print(json.dumps(obj,indent=4))
[
{
"a": 1,
"b": {
"aa": 11,
"bb": 22
}
},
{
"b": [
false,
true,
null
]
}
]
注意点:
- python字符的单引号被转为双引号
- 关键字False,True,None对应被转为false,true,null
- 元组被转为数组
- 解析后的json本质是字符串
在实际的项目开发中,使用到的python对象可能不止内置的对象,还有可能使用如numpy,pandas,datetime等高频使用的库。如下,将numpy的int32类型的1转为json,发现报错TypeError: Object of type int32 is not JSON serializable,这种类型的报错在python对象转json过程中是非常常见的,报错解释是输入的类型不能序列化。
# 解析python对象,会报错
json.dumps(np.int32(1))
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Anaconda3\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "C:\Anaconda3\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Anaconda3\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Anaconda3\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type int32 is not JSON serializable
该类问题的解决办法有两种,一是在数据源处做类型强制转换,如可以用内置的int方法把numpy的int32转为int。
# 解析python对象,强制类型转换
json.dumps(int(np.int32(1)))
'1'
另外一种方法更为灵活(推荐),设置json.dumps参数cls,cls参数输入为类,可以重写jsoneEncoder类中的default方法。
# 自定义类
class MyEncoder(json.JSONEncoder):
"""
重写json模块JSONEncoder类中的default方法
"""
def default(self, obj):
# np整数转为内置int
if isinstance(obj, np.integer):
return int(obj)
else:
return super(JetEncoder, self).default(obj)
# 解析python对象,设置cls参数
json.dumps(np.int32(1),cls=MyEncoder)
'1'
第二种方法灵活性更好,可以根据项目情况自定义需要转换的类型,当有多个地方需要转换时,通用性更好。
json.dump
json.dump用于保存python对象为json文件。obj.json文件中会保存解析obj后的json字符串。
# python list对象
print(obj)
[{'a': 1, 'b': {'aa': 11, 'bb': 22}}, {'b': (False, True, None)}]
# 解析python对象并输出到json文件
with open('obj.json','w') as f:
json.dump(obj,f)
json.loads
json.loads用于加载json字符串,然后解析成python对象。
json_str='{"a":1,"b":{"aa":11,"bb":22}}'
# 解析json字符串为python对象
json.loads(json_str)
{'a': 1, 'b': {'aa': 11, 'bb': 22}}
json.load
json.load用于加载json文件,然后解析成python对象。
# 解析python对象,输出到json文件
with open('obj.json','r') as f:
print(json.load(f))
[{'a': 1, 'b': {'aa': 11, 'bb': 22}}, {'b': [False, True, None]}]
需要下面的资料的,还有更多课件资源的,请私信我“666”领取!!!
私信我还有更多惊喜哦!!!
相关推荐
- Shiro学习系列教程三:集成web(web集成环境)
-
相关推荐:《Shiro学习系列教程一:Shiro之helloworld》《Shiro学习系列教程三:集成web》《Shiro学习系列教程四:集成web(二)》《Shiro学习系列教程五:自定义Real...
- 写了这么多年代码,这样的登录方式还是头一回见
-
SpringSecurity系列还没搞完,最近还在研究。有的时候我不禁想,如果从SpringSecurity诞生的第一天开始,我们就一直在追踪它,那么今天再去看它的源码一定很简单,因为我们了...
- Shiro框架:认证和授权原理(shiro框架授权的四种方式)
-
优质文章,及时送达前言Shiro作为解决权限问题的常用框架,常用于解决认证、授权、加密、会话管理等场景。本文将对Shiro的认证和授权原理进行介绍:Shiro可以做什么?、Shiro是由什么组成的?举...
- Spring Boot 整合 Shiro-登录认证和权限管理
-
这篇文章我们来学习如何使用SpringBoot集成ApacheShiro。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。在Java领域一般有SpringS...
- Apache Shiro权限管理解析二Apache Shiro核心组件
-
ApacheShiro核心组件Subject(用户主体)Subject是Shiro中的核心概念之一,表示当前用户(可以是登录的用户或匿名用户)。它是与用户交互的主要接口,提供了对用户身份验证...
- 详细介绍一下Apache Shiro的实现原理?
-
ApacheShiro是一个强大、灵活的Java安全框架,设计目标是简化复杂的安全需求,提供灵活的API,使开发者能方便地将安全功能集成到任何应用中。主要作用是用于管理身份验证、授权、会话管理和加...
- 什么是Apache Shiro?SpringBoot中如何整合Apache Shiro?
-
ApacheShiro是一个功能强大且易于使用的Java安全框架,主要用于构建安全的企业应用程序,例如在应用中处理身份验证(Authentication)、授权(Authorization)、加密(...
- Apache Shiro权限管理解析三Apache Shiro应用
-
Shiro的优势与适用场景优势简单易用:API设计直观,适合中小型项目快速实现权限管理。灵活性高:支持多种数据源(数据库、LDAP等),并允许开发者自定义Realm。跨平台支持:不仅限于We...
- 那些通用清除软件不曾注意的秘密(清理不需要的应用)
-
系统清理就像卫生检查前的大扫除,即使你使出吃奶的劲儿把一切可能的地方都打扫过,还会留下边边角角的遗漏。随着大家电脑安全意识的提高,越来越多的朋友开始关注自己的电脑安全,也知道安装360系列软件来"武装...
- JWT在跨域认证中的奇妙应用(jq解决跨域)
-
JWT在跨域认证中的奇妙应用什么是JWT?让我们先来聊聊JWT(JSONWebToken)。它是一种轻量级的认证机制,就像一张电子车票,能让用户在不同的站点间通行无阻。JWT由三部分组成:头部(H...
- 开启无痕浏览模式真能保护个人隐私吗?
-
在访问网站页面时,你是否有过这样的疑虑,自己访问的会不会是山寨网站?用公用电脑上网,个人信息会被别人看到吗?这时,有人会说,使用浏览器的“无痕浏览”模式不就行了,可以在操作中不留下“蛛丝马迹”,但,真...
- 辅助上网为啥会被抛弃 曲奇(Cookie)虽甜但有毒
-
近期有个小新闻,大概很多小伙伴都没有注意到,那就是谷歌Chrome浏览器要弃用Cookie了!说到Cookie功能,很多小伙伴大概觉得不怎么熟悉,有可能还不如前一段时间被弃用的Flash“出名”,但它...
- cookie、session和token(cookie,session和token的区别)
-
Cookie的概念最早是在1994年由NetscapeCommunications的程序员LouMontulli发明的,目的是为了解决当时早期互联网的一个关键问题:HTTP无状态协...
- 小白都能看懂的session与cookie的区别理解
-
cookie/session都是跟踪识别浏览器用户身份的一个东西。cookie的理解:我们要知道,服务器和客户端之间进行数据传输,需要使用到一个超文本传输协议(http协议),而http协议本身是个...
- 面试:网易一面:支撑10万QPS的电商购物车系统如何架构设计呢?
-
1.需求分析:10万QPS的购物车系统需要满足哪些需求?回答:10万QPS的购物车系统需要满足以下核心需求和挑战:核心功能:添加、删除、修改购物车商品实时查看购物车列表支持高并发读写(10万QPS)...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Shiro学习系列教程三:集成web(web集成环境)
- 写了这么多年代码,这样的登录方式还是头一回见
- Shiro框架:认证和授权原理(shiro框架授权的四种方式)
- Spring Boot 整合 Shiro-登录认证和权限管理
- Apache Shiro权限管理解析二Apache Shiro核心组件
- 详细介绍一下Apache Shiro的实现原理?
- 什么是Apache Shiro?SpringBoot中如何整合Apache Shiro?
- Apache Shiro权限管理解析三Apache Shiro应用
- 那些通用清除软件不曾注意的秘密(清理不需要的应用)
- JWT在跨域认证中的奇妙应用(jq解决跨域)
- 标签列表
-
- hive行转列函数 (63)
- sourcemap文件是什么 (54)
- display none 隐藏后怎么显示 (56)
- 共享锁和排他锁的区别 (51)
- httpservletrequest 获取参数 (64)
- jstl包 (64)
- qsharedmemory (50)
- watch computed (53)
- java中switch (68)
- date.now (55)
- git-bash (56)
- 盒子垂直居中 (68)
- npm是什么命令 (62)
- python中+=代表什么 (70)
- fsimage (51)
- nginx break (61)
- mysql分区表的优缺点 (53)
- centos7切换到图形界面 (55)
- 前端深拷贝 (62)
- kmp模式匹配算法 (57)
- jsjson字符串转json对象 (53)
- jdbc connection (61)
- javascript字符串转换为数字 (54)
- mybatis 使用 (73)
- 安装mysql数据库 (55)