说明:
#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. linux每日命令(2):cd命令

    1.命令格式: cd [目录名] 2.命令功能 切换当前目录至 [目录名] 3. 常用范例 1.进入系统根目录 命令: cd / 说明:进入系统根目录,上面命令执行完后拿ls命令看一下,当前目录已经到 ...

  2. mac中安装wxpython

    一.简介 wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的.功能键全的GUI用户界面. wxPython是作为优秀的跨平台GUI库wxWidgets ...

  3. JVM 内部原理(一)— 概述

    JVM 内部原理(一)- 概述 介绍 版本:Java SE 7 图中显示组件将会从两个方面分别解释.第一部分涵盖线程独有的组件,第二部分涵盖独立于线程的组件(即线程共享组件). 目录 线程独享(Thr ...

  4. Java知多少(51)finally

    当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向.依赖于方法是怎样编码的,异常甚至可以导致方法过早返回.这在一些方法中是一个问题.例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文 ...

  5. Linux CentOS 6.9 Minimal 编译 OpenJDK 7

    今天学习<深入理解Java虚拟机:JVM高级特性与最佳实践>一书,并动手在Linux系统上编译OpenJDK 7,初次搞不太顺利,特记录下编译操作细节. 一.前期准备 约定:工具默认安装目 ...

  6. IDEA的这八条配置你一定要改!

    一定要改的八条军规.快捷键使用idea默认的,与其他同事保存一致 自动编译开关 忽略大小写开关 智能导包开关 悬浮提示开关 取消单行显示tabs的操作 项目文件编码 滚轴修改字体大小 设置行号显示 在 ...

  7. windows 同时启动多个Tomcat 控制台日志(startup.bat)输出到指定文件中

    1 .修改startup.bat第42行 call "%EXECUTABLE%" start %CMD_LINE_ARGS% 为 call "%EXECUTABLE%&q ...

  8. php的opcache缓存扩展

    opcache (全程 zend opcache): 从php5.5开始,默认提供的php脚本缓存扩展,编译php5.5时加上参数--enable-opcache就可以编译opcache了,只是要启用 ...

  9. Android摸索一环境搭建

    用户场景:做语音保全,首先要拨打400号码,听到语音后需要先按1然后再拨打对方号码,那么问题就来了,如果我记不清楚对方号码!是不是很苦逼----我要先找到对方号码然后用笔或者其他方式把这个号码记录下来 ...

  10. 使用 AJAX + 三级联动 实现分类出全国各地的省,市,区

    使用AJAX + 三级联动  实现分类出全国各地的省,市,区 也可以将下面的显示页面所写的 function循环,封装成js文件,就是在写代码软件里创建一个js文件,就和创建一个HTML或php文件一 ...