说明:
#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的更多相关文章

  1. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  2. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  4. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  5. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  6. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  7. JSON.parse()和JSON.stringify()

    1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...

  8. json与JavaScript对象互换

    1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...

  9. .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

    去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...

随机推荐

  1. 【Android】Android设计准则

    准则 下面的这些设计准则是为了让Android的用户体验团队保持用户最佳的体验而发明设计的. 把他们融合到你的创造力中,作为你的设计理念,而不是有意地去使用. 吸引我 用惊奇的方式来取悦我 一个漂亮的 ...

  2. GDB用法简要整理

    [时间:2017-05] [状态:Open] [关键词:gdb,调试,debug,用户手册] 使用gdb是需要在编译是指定-g命令,在可执行文件中添加符号信息. 1. 启动和退出 可以使用gdb gd ...

  3. 跨控制器跳转view——RedirectToRoute和RedirectToAction

    已知控制器AccountController.cs和HomeController.cs,如果从页面Account/Login直接跳转到Home/Index,可以利用RedirectToRoute和Re ...

  4. git push origin master和git push有什么区别?

    1.master是主分支,还可以建一些其他的分支用于开发.2.git push origin master的意思就是上传本地当前分支代码到master分支.git push是上传本地所有分支代码到远程 ...

  5. 图像处理滤波应用(Halcon)

    1.增强对比度:halcon算子 equ_histo_image (GrayImage, ImageEquHisto) 2.空间滤波基础 滤波指接受或拒绝一定的频率分量.低通滤波器的最终效果是模糊(平 ...

  6. 大量删除MySQL中的数据

    出现的背景: 公司做了一个redis相关的项目,其中mysql存储了很多统计数据.比如客户端上报的数据,redis实例的数据,应用的数据,机器的数据等.每天都在上报,采集,由于没有定期删除,数据大量累 ...

  7. 30分钟入门Java8之lambda表达式

    前言 Google在今年发布Android N开发者预览版,一并宣布开始支持Java 8.我们终于能在Android开发中使用到Java8的一些语言特性了.目前支持: 默认方法 lambda表达式 多 ...

  8. [Stats385] Lecture 03, Harmonic Analysis of Deep CNN

    大咖秀,注意提问环节大家的表情,深入窥探大咖的心态,很有意思. 之前有NG做访谈,现在这成了学术圈流行. Video: https://www.youtube.com/watch?v=oCohnBbm ...

  9. [UI] 01 - CSS

    前言 一.认识 From: http://www.runoob.com/css/css-tutorial.html CSS 指层叠样式表 (Cascading Style Sheets) 解决内容与表 ...

  10. 7个简单的Excel技巧,需要的赶紧get起来吧

    1.直观数据图形化 2. Ctrl不连续选择 3. Ctrl+A相连文本框全选 4. 格式刷点击 5. SUM函数求和 6. 自动求和.自动求平均值.自动计数 7. 行.列距调节