简介

json全名是JavaScript Object Notation(即:Javascript对象标记)。它是JavaScript的子集,JSON是轻量级的文本数据交换格式。前端和后端进行数据交互,其实就是js和python进行数据交互,但json数据是不能被python识别的,故需要转码,即序列化和反序列化。而今天学习的模块json就是实现这一功能。在python中是自带这个模块的,故不需要自己另外安装。

json数据与python数据区别

json数据的名称必须用双引号来包括,这也是json数据的特点。下面是两幅两个数据的转化参照图。

参照上面两幅图可以发现,python的集合类型是不能参与转化到json的,且json数据也没有set类型。

json方法

首先我们用json的一个魔法方法all来查看json的方法有哪些?

import json
print (json.__all__)
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder']

可以看到上面共有7个方法,下面讲解下其中四个最常用的方法。

  • dumps:此方法是将python对象转换为json对象,实现序列化过程。下面是一个小小实例。
import json
data = {
'name' : 'wl',
'age' : 18,
'tu' : (1,2,3),
'li' : ['a','b','c'],
'kong' : None,
'shi' : True,
'dict' : {1:2,3:4}
}
json_data = json.dumps(data)
print(json_data)
{"shi": true, "age": 18, "tu": [1, 2, 3], "kong": null, "li": ["a", "b", "c"], "name": "wl", "dict": {"1": 2, "3": 4}}
  • loads:此方法刚好与dumps方法相反,它实现的是序列化的反过程。
python_data = json.loads(json_data)
print(python_data)
print(type(python_data))
{'tu': [1, 2, 3], 'name': 'wl', 'li': ['a', 'b', 'c'], 'shi': True, 'dict': {'3': 4, '1': 2}, 'kong': None, 'age': 18}
<class 'dict'>

可以发现,python的列表和json的数组可以相互转换,但python的元组与json的数组并不是,元组只能转换成json的数组,而数组却转不回去,其只能转成python的列表。

  • dump:与dumps不同的是,此方法是在文件里进行操作序列化的过程,故常常配合于with open语句。
with open('data.json','w+') as f:
json.dump(data,f)
f.seek(0)
print(f.read())
{"dict": {"1": 2, "3": 4}, "name": "wl", "tu": [1, 2, 3], "kong": null, "li": ["a", "b", "c"], "age": 18, "shi": true}
  • load:load方法与dump相反,它实现在文件中的序列化反过程。
with open('data.json','r') as f:
print(json.load(f))
{'li': ['a', 'b', 'c'], 'name': 'wl', 'shi': True, 'tu': [1, 2, 3], 'dict': {'3': 4, '1': 2}, 'kong': None, 'age': 18}

Python模块——json的更多相关文章

  1. Python模块(json)

    json json模块,用来处理json风格的数据 一.json的数据格式 json是javascripts的标准格式,json的格式是由若干个 键/值(key,values) 对的集合,该集合可以理 ...

  2. 潭州课堂25班:Ph201805201 python 模块json,os 第六课 (课堂笔记)

    json 模块 import json data = { 'name':'aa', 'age':18, 'lis':[1,3,4], 'tupe':(4,5,6), 'None':None } j = ...

  3. python模块-json、pickle、shelve

    json模块 用于文件处理时其他数据类型与js字符串之间转换.在将其他数据类型转换为js字符串时(dump方法),首先将前者内部所有的单引号变为双引号,再整体加上引号(单或双)转换为js字符串:再使用 ...

  4. python模块--json \ pickle \ shelve \ XML模块

    一.json模块 之前学习过的eval内置方法可以将一个字符串转成一个python对象,不过eval方法时有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,e ...

  5. day19 python模块 json模块 pickle模块

    day19 python   一.序列化模块     序列类型: 列表 字符串 元组 bytes     序列化: 特指字符串和bytes, 就是把其他的数据类型转化成序列的数据类型的过程 dic = ...

  6. python 模块-json

    1.JSON(Javascript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Lan ...

  7. python 模块之-json

    python 模块json import json x="[null,true,false,1]" print(json.loads(x))   #---------------- ...

  8. python模块(json和pickle模块)

    json和pickle模块,两个都是用于序列化的模块 • json模块,用于字符串与python数据类型之间的转换 • pickle模块,用于python特有类型与python数据类型之间的转换 两个 ...

  9. python模块time&datetime&json & picle&14.logging等

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

随机推荐

  1. Java中调试与测试常用方法

    一.断言 1.概述 根据之前的条件来对后续的结果进行预判. 2.在Java中,断言默认是不开启的,需要手动进行开启,只需添加参数-ea(enable assert的意思) 开启步骤: 选中项目路径,鼠 ...

  2. Python MySQL Update

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

  3. CF1141D Colored Boots

    There are n left boots and n right boots. Each boot has a color which is denoted as a lowercase Lati ...

  4. M: Mysterious Conch 字符串哈希

    Problem Description小明有一个神奇的海螺,你对海螺说一段字符串,海螺就会返回一个单词,有字符串里面的所有字符组成如告诉海螺“lloeh”海螺则会告诉你“hello”如果有多个单词对应 ...

  5. Linux基础学习准备

    Linux 基础学习准备 工欲善其事必先利其器,还是买个服务器折腾比较好. 虚拟机和镜像 推荐吾爱的:吾爱虚拟机2.0 CentOS镜像: Centos国内下载源 http://man.linuxde ...

  6. 【pwnable.kr】fb

    这是pwnable.kr的签到题,记录pwn入门到放弃的第一篇. ssh fd@pwnable.kr -p2222 (pw:guest) 题目很简单,登录上了ssh后,发现了3个文件:fd,fd.c, ...

  7. java向量 vector

    Vector 向量 是java.util 包里的一个类,该类继承AbstractList,实现了类似动态数组的功能. 向量和数组相似,都可以保存一组数据,但数组的大小(长度)是固定的,而Vector ...

  8. ContentProvider ContentResolver ContentObserver 内容:提供、访问、监听

    内容提供 public class PersonContentProvider extends ContentProvider{ private static final String AUTHORI ...

  9. (1) JVM内存管理:内存模型

    引子 一段简单的代码结果引发疑问,==到底比较的是什么?equals呢? public static void main(String args[]){ String s1="abc&quo ...

  10. 关于spring cloud “Finchley.RC2”版本在spring cloud config中的ArrayIndexOutOfBoundsException

    原文 https://www.cnblogs.com/Little-tree/p/9166382.html 在学spring cloud config的时候遇到一个ArrayIndexOutOfBou ...