day4_处理json
说明:
#json是一种通用的数据类型,所有的语言都认识。
#k - v {}
#json串就是一个字符串,不能根据key-value取值
#json可以转成字典
#json串就是字符串,可放在三引号中
校验json格式的网址:http://www.bejson.com/
那么json怎么转成字典,用到模块json,可以import json
一、JSON 函数
1、json.dumps:字典转成json串(字符串)
json.dumps(stus,indent=8,ensure_ascii=False) #将字典转成json字符串 ;indent 控制几个缩进的;当字典中有中文的时候,需要写ensure_ascii=False,不然json串里面不显示汉字。
2、json.loads:将json串转成字典
1)字典和json互相转换:
import json #导入json模块
s = '''
{
"error_code": 0,
"stu_info": [
{
"id": 309,
"name": "小白",
"sex": "男",
"age": 28,
"addr": "河南省济源市北海大道32号",
"grade": "天蝎座",
"phone": "18512572946",
"gold": 100
},
{
"id": 310,
"name": "小白",
"sex": "男",
"age": 28,
"addr": "河南省济源市北海大道32号",
"grade": "天蝎座",
"phone": "18516572946",
"gold": 100
}
]
}
'''
res = json.loads(s) #将json串转成字典
print(res)
print(type(res))
stus = {'xiaojun':'','xiaohei':''} #一个字典
res2 = json.dumps(stus) #将字典转成json串
print(res2)
print(type(res2))
2)字典转成json串,然后写入文件
stus = {'xiaojun':'','xiaohei':'','海龙':''} #一个字典
res2 = json.dumps(stus,indent=8,ensure_ascii=False) #将字典转成json串
print(res2)
print(type(res2))
with open('stus.json','w',encoding='utf-8') as f: #文件的后缀.json,这样文件里面显示的好看,有颜色区分。后缀无所谓
f.write(res2)
文件中看-实际带有颜色:
{
"xiaohei": "",
"海龙": "",
"xiaojun": ""
}
3)从文件中读取json串,转成字典
with open('stus.json','r',encoding='utf-8')as f:
content = f.read() #返回字符串
user_dict = json.loads(content) #将json字符串转成字典
print(user_dict)
3、json.load()与json.loads()的区别
两个方法功能类似,可选参数也相同,最大的区别在于,json.load方法接受的输入,即第一个参数,是包含json数据的文件对象,如open方法的返回对象。
json.loads接受的输入是json字符串,而非文件对象。
如果说你要操作文件,可以直接用json.load
举例:
json.loads()将文件中的json转成字典如下:
with open('stus.json','r',encoding='utf-8')as f:
content = f.read() #返回字符串
user_dict = json.loads(content) #json.loads接受的是字符串content
print(user_dict)
json.load()将文件中的json转成字典如下:
with open('stus.json','r',encoding='utf-8')as f:
user_dic = json.load(f) #json.load接受的是文件对象
print(user_dic)
4、json.dump()和json.dumps()区别
dump()第一个参数时字典对象,第二个参数是文件对象,可以直接将转换后的json数据写入文件;dumps的第一个参数是对象字典,其余都是可选参数。
参数记录如下:
ensure_ascii 默认为True,保证转换后的json字符串中全部是ascii字符,非ascii字符都会被转义。如果数据中存在中文或其他非ascii字符,最好将ensure_ascii设置为False,保证输出结果正常。
indent 缩进,默认为None,没有缩进,设置为正整数时,输出的格式将按照indent指定的半角空格数缩进,相当实用。
separators 设置分隔符,默认的分隔符是(',', ': '),如果需要自定义json中的分隔符,例如调整冒号前后的空格数,可以按照(item_separator, key_separator)的形式设置。
sort_keys 默认为False,设为True时,输出结果将按照字典中的key排序。
将字典转成json串写入文件操作:
json.dumps()方式
stus = {'xiaojun':'','xiaohei':'','海龙':''}
f = open('stus.json','w',encoding='utf-8')
res = json.dumps(stus,indent=8,ensure_ascii=False) #转换成json串
f.write(res) #写入文件
json.dump()方式:
stus = {'xiaojun':'','xiaohei':'','海龙':''}
f = open('stus.json','w',encoding='utf-8')
json.dump(stus,f,indent=8,ensure_ascii=False) #json.dump第一个参数字典(stus),第二个参数文件对象(f),这个不需要再写入操作了,直接就写进去了
以上:当你要把字典写到文件里面,用dump比较好用。如果你不操作文件,想存到数据库里面,不能用dump,还得用dumps.
不带s都跟文件相关,带s的都跟字符串相关。
问题:应用json.load/loads/dump/dumps方法时,文件中的内容如果不是json格式会抛异常如下。
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
原因:文件中不是json格式,可用http://www.bejson.com/查询是不是json格式,其中:文件是空的不是json格式,1也是json格式,{}是json格式
如果起初文件就是空的,可以写个{}这样就能正确解析json串了
day4_处理json的更多相关文章
- 使用TSQL查询和更新 JSON 数据
JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- .NET Core系列 : 2 、project.json 这葫芦里卖的什么药
.NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
一.事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...
- JSON.parse()和JSON.stringify()
1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...
- json与JavaScript对象互换
1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...
- .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
随机推荐
- Manager升职了
公司去年从每年七月份公布officer升职改成了每年四月份公布. 早上收到大头发给全公司的邮件,赫然发现Manager升了一级到VP,虽然是金融公司,但我司的VP好像会比银行多一点点福利,比如额外假期 ...
- http://www.cnblogs.com/chenmeng0818/p/6370819.html
http://www.cnblogs.com/chenmeng0818/p/6370819.html js中的正则表达式入门 什么是正则表达式呢? 正则表达式(regular expression ...
- opencv2/nonfree/nonfree.hpp:没有那个文件或目录
致命错误: opencv2/nonfree/nonfree.hpp:没有那个文件或目录 fatal error: opencv2/nonfree/nonfree.hpp: No such file o ...
- Java知多少(65)线程的挂起、恢复和终止
有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...
- rqalpha探究 1 setup.py
rqalpha是难得几个好的做量化交易的开源项目,不过由于自己python用的实在不多,看起来还是觉得很复杂. 因此准备抽取出框架,从最简单的搭建. 思路 从setup着手,看一下如何建立一个发布工程 ...
- 【转】MYSQL-CLUSTER-7.5搭建数据库集群
阅读目录 前言 mysql cluster中的几个概念解释 架构图及说明 下载mysql cluster 安装mysql cluster之前 安装配置管理节点 安装配置数据和mysql节点 测试 启动 ...
- 《转载》spring定时任务详解(@Scheduled注解)
本文转载自爱如指间沙 //每一个小时执行一次 @Scheduled(cron = "0 0 * * * ?") public void saveDailyScoreSchedule ...
- linux下WEB服务器安装、配置VSFTP
转载 http://www.oicto.com/centos-vsftp/?tdsourcetag=s_pcqq_aiomsg linux下WEB服务器安装.配置VSFTP 由 admin · 发布 ...
- mysql8.0驱动问题
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</a ...
- day_5.21 py 高级编程
1.禁止模块之间的循环调用 2.浅拷贝 只拷贝引用!!\ 3. 深拷贝 只要里面有引用就继续拷贝 4.copy,copy() 5. '''2018-5-21 11:39:52就业班 py高级 ...