先来认识下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. 理解 Spring 定时任务的 fixedRate 和 fixedDelay 的区别

    用过 Spring 的 @EnableScheduling 的都知道,有三种方式,即 @Scheduled 注解的 fixedRate(fixedRateString), fixedDelay(fix ...

  2. Excel催化剂开源第38波-json字符串转多个表格结构

    作为开发者来说,面对json字符一点不陌生,但对于普通用户来说,更合适的是数据表结构的数据,最好数据已经躺在Excel表格内,不用到处导入导出操作.所以开发者和用户之间是有不同的数据使用思维和需求的. ...

  3. webService 的使用

    webService Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些 ...

  4. 一文了解JVM

    一.什么是JVM JVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实 ...

  5. 【css系列】六种实现元素水平居中方法

    一.前言 居中效果在CSS中很是普通的效果,平时大家所看到的居中效果主要分为三大类:水平居中.垂直居中和水平垂直居中.而其中水平居中相对于后两者来说要简单得多.使用了css3的flexbox的属性轻松 ...

  6. os模块习题

    os 1.使用python代码统计一个文件夹中所有文件的总大小 import os def func(path): size_sum = 0#文件总大小为0 name_lst = os.listdir ...

  7. k8s1.9.0安装--基础集群部署

    二.基础集群部署 - kubernetes-simple 1. 部署ETCD(主节点) 1.1 简介 kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运 ...

  8. Linux网站及工具网站

    Linux官网网站 GNU官网:http://www.gnu.org/ Linux内核官网:https://www.kernel.org/ Redhat官网:https://www.redhat.co ...

  9. 用ECharts绘制Prometheus图表,实现类似Grafana的自定义Dashboard

      大家一般都是用Grafana自定义Dashboard来监控Prometheus数据的,作者这次尝试用ECharts来绘制Prometheus数据图表,一方面可以减少依赖,另一方面可以将监控界面灵活 ...

  10. poj 2524 Ubiquitous Religions(简单并查集)

    对与知道并查集的人来说这题太水了,裸的并查集,如果你要给别人讲述并查集可以使用这个题当做例题,代码中我使用了路径压缩,还是有一定优化作用的. #include <stdio.h> #inc ...