先来认识下JSON


JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

简单点说,设计JSON这种格式,主要是为了方便数据交换

引用模块


import json

基本操作


  • 编码:把一个python对象编码转换成一个json字符串json.dumps()
  • 解码:把一个json字符串转换成一个python对象json.loads()

转化表


1.Python->JSON

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

2.JSON->Python

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

json.dumps()


1.编码,该方法返回了一个str对象encodedjson

>>> import json
>>> dict={"a":1,"b":2,"c":{"d":3,"e":(4,5)}}
>>> type(dict)
<type 'dict'>
>>> s=json.dumps(dict)
>>> type(s)
<type 'str'>
>>> print s
{"a": 1, "c": {"e": [4, 5], "d": 3}, "b": 2}

2.json.dumps方法还提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的),separatorsindent等参数。

sort_keys

>>> data1 = {'b':789,'c':456,'a':123}
>>> data2 = {'a':123,'b':789,'c':456}
>>> d1=json.dumps(data1,sort_keys=True)
>>> d2=json.dumps(data2,sort_keys=True)
>>> d3=json.dumps(data2)
>>> print d1
{"a": 123, "b": 789, "c": 456}
>>> print d2
{"a": 123, "b": 789, "c": 456}
>>> print d3
{"a": 123, "c": 456, "b": 789}
>>> print d1==d2
True
>>> print d1==d3
False

indent参数是缩进的意思,可以使得数据存储的格式变得更加优雅

>>> data1 = {'b':789,'c':456,'a':123}
>>> d1=json.dumps(data1,sort_keys=True,indent=3)
>>> print d1
{
"a": 123,
"b": 789,
"c": 456
}

separator参数可以移除多余的空白符,来达到数据压缩的目的。该参数传递是一个元组,包含分割对象的字符串。

>>> data1 = {'b':789,'c':456,'a':123}
>>> len(data1)
3
>>> len(repr(data1))
30
>>> len(json.dumps(data1))
30
>>> len(json.dumps(data1,indent=2))
40
>>> len(json.dumps(data1,separators=(',',':')))
25

注意:

1.separators = (',', ':')为固定,是理想的分割结果

2.str()一般是将数值转成字符串。

repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。

>>> a = 'hello'
>>> a
'hello'
>>> repr(a)
"'hello'"
>>> print repr(a)
'hello'
>>> str(a)
'hello'
>>> print str(a)
hello

json.loads()


解码

>>> data1 = {'b':789,'c':456,'a':123}
>>> s=json.dumps(data1)
>>> type(s)
<type 'str'>
>>> s1=json.loads(s)
>>> type(s1)
<type 'dict'>
>>> print s1
{u'a': 123, u'c': 456, u'b': 789}
>>> print s
{"a": 123, "c": 456, "b": 789}
>>> print s1['a']
123

注:loads方法返回了原始的对象,但是仍然发生了一些数据类型的转化。比如,上例中‘a’转化为了unicode类型。

参考


Python官方文档

Json概述以及python对json的相关操作

暂时就这么多了,之后还会更新有关python的内容=_=

用python解析JSON的更多相关文章

  1. 使用Python解析JSON数据的基本方法

    这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下:     ----------------------------------- ...

  2. python 解析json loads dumps

    认识 引用模块 重要函数 案例 排序 缩进参数 压缩 参考 认识 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standa ...

  3. 笔记:使用Python解析JSON

    使用Python解析JSON json是一种轻量级的数据交换格式,易于阅读和编写. json函数具体作用描述 函数 具体描述作用 json.dumps 将python对象编码为JSON字符串 json ...

  4. 使用Python解析JSON数据

    使用Python解析百度API返回的JSON格式的数据 # coding:utf-8 # !/usr/bin/env python import matplotlib.pyplot as plt fr ...

  5. python 解析json

    一.概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的 ...

  6. python解析json文件之简介

    一.JSON简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition ...

  7. python解析json数据

    现在的API接口多为xml或json,json解析更简洁相对xml来说 以豆瓣的API接口为例,解析返回的json数据: https://api.douban.com/v2/book/1220562 ...

  8. Python解析json字符串,json字符串用法

    json数据简介 json数据是一个轻量级的数据交换格式,采用完全独立于语言的文本格式,这些特性使json称为理想的数据交换语言,易于人阅读和编写,同时易于机器解析和生成. json中的字符集必须是U ...

  9. python 解析json格式

    对于网页爬取结果为json格式的,可以直接使用python的json库解析,获取相应字段的值,比用正则匹配更简单规范. import json…… resp=requests.post(url,hea ...

随机推荐

  1. linux 定时任务 crontabs 安装及使用方法

    boom 安装 crontab yum install crontabs centos7 自带了我没有手动去装 启动/关闭 service crond start // 启动服务 service cr ...

  2. LiteIDE TARGETARGS -conf_path=E:/PokerServer/src/GameServer/conf/texas.xml -log_dir=E:/PokerServer/src/GameServer/main/log

    LiteIDE TARGETARGS -conf_path=E:/PokerServer/src/GameServer/conf/texas.xml -log_dir=E:/PokerServer/s ...

  3. FC游戏修改教程(hack)小白文。

    FC(NES)红白机Family Computer(简称FAMICOM)(或Nintendo Entertainment System)是任天堂公司发行的第一代家用游戏机. 修改FC游戏需要的工具有 ...

  4. Excel催化剂开源第2波-自动检测Excel的位数选择对应位数的xll文件安装

    Excel插件的部署问题难倒了不了的用户,特别是VSTO的部署,用ExcelDna开发的xll文件部署方便,不挑用户机器环境,是其开发Excel插件的一大优势. 其开发出来的xll文件,最终还是需要考 ...

  5. 前端框架——树形结构Ztree的使用

    地址 官网:http://ztree.me 码云:https://gitee.com/zTree/zTree_v3 可以实现效果 使用方式 下载资源文件,引入到自己的项目中 <head> ...

  6. TensorFlow笔记-文件读取

    小数量数据读取 这些只用于可以完全加载到内存中的小型数据集: 1,储存在常数中 2,储存在变量中,初始化后,永远不改变它的值 使用常量 training_data = ... training_lab ...

  7. C#3.0新增功能09 LINQ 基础01 语言集成查询

    连载目录    [已更新最新开发文章,点击查看详细] 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 数据查询历来都表示为简单的字符串,没有编译时类型检查或 Inte ...

  8. AIX7.1安装zabbix_agent3.4

    1.在zabbix官网https://www.zabbix.com/download下载Zabbix pre-compiled agents 2.Zabbix pre-compiled agents安 ...

  9. JSP数据交互(一)

    1.JSP内置对象:JSP内置对象是 Web 容器创建的一组对象,不用通过手动new就可以使用 2.JSP9大内置对象:      对象名称 类型 request (请求对象) javax.servl ...

  10. bean的创建(五)第三部分 bean工厂方法参数的解析

    准备好一系列参数之后,开始参数类型的转换,方法参数的对应. ConstructorResolver.createArgumentArray private ArgumentsHolder create ...