1. 常用模块:
    一个Python文件就是一个模块
    import xxx
    1. 标准模块,Python自带的,如time/random
    2. 第三方模块,如连接mysql,需要安装
    3. 自己写的Python文件
  1. 校验json格式是否正确:www.bejson.com
  2.  
  3. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,其最广泛的应用是作为AJAXweb服务器和客户端的通讯的数据格式。json类似于xml,但比 XML 更小、更快,更易解析。

一、json字符串转为字典

json.load / json.loads

两个方法功能类似,可选参数也相同,最大的区别在于,json.load方法接受的输入,即第一个参数,是包含json数据的文件对象,如open方法的返回对象,

json.loads接受的输入是json字符串,而非文件对象。从输入类型的区别也可以看出两者的使用场合。

查看源码:
  1. def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
  2. allow_nan=True, cls=None, indent=None, separators=None,
  3. default=None, sort_keys=False, **kw):
  4. # Serialize ``obj`` to a JSON formatted ``str``.
  5. # 序列号 “obj” 数据类型 转换为 JSON格式的字符串
  1. def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
  2. allow_nan=True, cls=None, indent=None, separators=None,
  3. default=None, sort_keys=False, **kw):
  4. """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
  5. ``.write()``-supporting file-like object).
  6. 我理解为两个动作,一个动作是将”obj“转换为JSON格式的字符串,还有一个动作是将字符串写入到文件中,也就是说文件描述符fp是必须要的参数 """

1. json.loads : 将json编码的字符串转换为python的数据结构

  1. import json
    json_str = '''
  2. {"name":"xiaohei","age":18,"sex":"男","age":18}
  3. '''
  4. res = json.loads(json_str) #把字符串(json串)转成字典
  5. print(res)
  6. print(type(json_str))
  7. print(type(res))
  8.  
  9. #以上输出如下:
  10. # {'name': 'xiaohei', 'age': 18, 'sex': '男'}
  11. # <class 'str'>
  12. # <class 'dict'>

2. json.load : 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构,load可以自己读文件

  1. import json
  2. with open('text.json','r',encoding='utf-8') as fr:
  3. aa = json.loads(fr.read())
  4. fr.seek(0)
  5. bb = json.load(fr)# json.load(fr)和json.loads(fr.read()) 返回结果一样,load可以自己去读文件
  6. print(aa)
  7. print(bb)
  8.  
  9. #输出
  10. # {'name': '小黑', 'age': 18, 'sex': '男'}
  11. # {'name': '小黑', 'age': 18, 'sex': '男'}

二、字典转换为json

json.dump / json.dumps

对应于load和loads,dump的第一个参数是对象字典,第二个参数是文件对象,可以直接将转换后的json数据写入文件,dumps的第一个参数是对象字典,其余都是可选参数。dump和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排序。

查看源码:

  1. def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
  2. """Deserialize ``s`` (a ``str`` instance containing a JSON document) to a Python object.
  3. 将包含str类型的JSON文档反序列化为一个python对象"""
  1. def load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
  2. """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing a JSON document) to a Python object.
  3. 将一个包含JSON格式数据的可读文件饭序列化为一个python对象"""

1. json.dumps: 将数据通过特殊的形式转换为所有程序语言都认识的字符串

  1. import json
  2. dic = {
  3. "xiaohei":{
  4. "age":18,
  5. "password":12345,
  6. "sex":"男",
  7. "addr":"北京"
  8. },
  9. "马春波":{
  10. "age":18,
  11. "password":12345,
  12. "sex":"男",
  13. "addr":"北京"
  14. },
  15. "王东泽":{
  16. "age":18,
  17. "password":12345,
  18. "sex":"男",
  19. "addr":"北京"
  20. },
  21. }
  22. res = json.dumps(dic,ensure_ascii=False,indent=4)#把字典变成字符串
  23. print(res)
  24. f = open('user.json','w',encoding='utf-8')
  25. f.write(res) #写入文件
  26.  
  27. #输出:
  28. {
  29. "xiaohei": {
  30. "age": 18,
  31. "password": 12345,
  32. "sex": "男",
  33. "addr": "北京"
  34. },
  35. "马春波": {
  36. "age": 18,
  37. "password": 12345,
  38. "sex": "男",
  39. "addr": "北京"
  40. },
  41. "王东泽": {
  42. "age": 18,
  43. "password": 12345,
  44. "sex": "男",
  45. "addr": "北京"
  46. }
  47. }

2. json.dump:将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件

  1. import json
  2.  
  3. dic = {
  4. "xiaohei":{
  5. "age":18,
  6. "password":12345,
  7. "sex":"男",
  8. "addr":"北京"
  9. },
  10. "小白":{
  11. "age":18,
  12. "password":12345,
  13. "sex":"男",
  14. "addr":"北京"
  15. },
  16. "小王":{
  17. "age":18,
  18. "password":12345,
  19. "sex":"男",
  20. "addr":"北京"
  21. },
  22. }
  23.  
  24. fw = open('newuser.json','w',encoding='utf-8')#打开一个新的文件
  25. aa = json.dump(dic,fw,indent=4,ensure_ascii=False)#将字典写到该文件中
  26. print(aa)

三、 总结

1. json序列化方法:

dumps:无文件操作            dump:序列化+写入文件

2. json反序列化方法:

loads:无文件操作              load: 读文件+反序列化

3.

python 原始类型向 json 类型的转化对照表:

Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null

4. json 类型转换到 python 的类型对照表:

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

Python常用模块之json模块的更多相关文章

  1. Python常用内置模块之xml模块

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

  2. Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块

    一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...

  3. Python 入门之 内置模块 -- 序列化模块(json模块、pickle模块)

    Python 入门之 内置模块 -- 序列化模块(json模块.pickle模块) 1.序列化 Python中这种序列化模块有三种: ​ json模块 : ​ 不同语言都遵循的一种数据转化格式,即不同 ...

  4. os模块、sys模块、json模块、pickle模块、logging模块

    目录 os模块 sys模块 json模块 pickle模块 logging模块 os模块 功能:与操作系统交互,可以操作文件 一.对文件操作 判断是否为文件 os.path.isfile(r'路径') ...

  5. os模块,sys模块,json模块,subprocess模块

    os模块 一·什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同 的平台进行相应的操作,在python编程时,经常和文件.目录打交道 ...

  6. Python 3 中的json模块使用

    1. 概述 JSON (JavaScript Object Notation)是一种使用广泛的轻量数据格式. Python标准库中的json模块提供了JSON数据的处理功能. Python中一种非常常 ...

  7. Python序列化-pickle和json模块

    Python的“file-like object“就是一种鸭子类型.对真正的文件对象,它有一个read()方法,返回其内容.但是,许多对象,只要有read()方法,都被视为“file-like obj ...

  8. Python 自学基础(四)——time模块,random模块,sys模块,os模块,loggin模块,json模块,hashlib模块,configparser模块,pickle模块,正则

    时间模块 import time print(time.time()) # 当前时间戳 # time.sleep(1) # 时间延迟1秒 print(time.clock()) # CPU执行时间 p ...

  9. Python学习笔记:json模块和pickle模块(数据序列化)

    Python中的json模块和pickle都是用于数据的序列化和反序列化,它们提供的方法也是一样的:dumps,dump,loads,load dumps(obj):将对象序列化为str. dump( ...

随机推荐

  1. anaconda的安装教程和使用方法

    一.anaconda安装方法: 1.下载: anaconda官方下载地址:https://www.anaconda.com/download/ 2.安装: 可以自己指定路劲,也可以选择默认安装,最后记 ...

  2. Spring MVC 架构的java web工程如何添加登录过滤器

    发布到外网的web工程必须添加登录过滤器来阻挡一些非法的请求,即只有登录的用户才能对web工程进行请求,否则无论请求什么资源都需要调整到登录页面进行登录操作.这时就需要用到过滤器,其实非常简单,只需要 ...

  3. 2018 ACM 网络选拔赛 青岛赛区

    一些题目的代码被网站吞了…… Problem B. Red Black Tree http://acm.zju.edu.cn/onlinejudge/searchProblem.do?contestI ...

  4. bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块算法)

    传送门 题意: 中文题意,不再赘述. 题解: 下午在补分块算法的相关知识,看到某大神博客推荐的这道题目,就试着做了做: TLE了一下午可还行: 我的思路: 将这 n 个点分成 sqrt(n) 块: i ...

  5. 在Linux中复制文件夹下的全部文件到另外文件夹

    https://jingyan.baidu.com/article/656db918f83c0de380249c5a.html 在Linux系统中复制或拷贝文件我们可以用cp或者copy命令,但要对一 ...

  6. 拆分字符串法 获取url的GET参数

    function serilizeURL(url){ var rs=url.split("?")[1]; var arr=rs.split("&"); ...

  7. css3: 基本知识记录

    1.transition过渡: 元素从一种样式到另一种样式添加效果: div { transition: width 2s, height 2s, transform 2s; -moz-transit ...

  8. 流明(lux)和坎德拉;

    流明是光照度:  坎德拉是光强: 流明是光通量的单位, cd是光强单位 光强是单位立体角的光通量: 照度是单位面积的光通量: 尼特是亮度单位   1尼特 = 1CD/m^2: 1 lx = 1 流明每 ...

  9. 【openssl】利用openssl完成X509证书和PFX证书之间的互转

    利用openssl完成X509证书和PFX证书之间的互转 # OpenSSL的下载与安装: 1.下载地址: 官方网址—— https://www.openssl.org/source/ OpenSSL ...

  10. NGUI-实例化问题

    大家好,我是蜀云泉,我的博客存在的不足之处,希望大家包涵. 我在研究NGUI的时候发现一个问题.在NGUI下实例化物体,其坐标总是位于原点,也就是UIRoot的(0,0,0)处,困惑了好几天我才发现N ...