先来认识下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. python基础-python解释器多版本共存-变量-常量

    一.编程语言的发展史 机器语言-->汇编语言-->高级语言,学习难度及执行效率由高到低,开发效率由低到高 机器语言:二进制编程,0101 汇编语言:用英文字符来代替0101编程 高级语言: ...

  2. Spring:IOC本质分析探究

    IOC本质分析 分析实现 我们先用我们原来的方式写一段代码 . 先写一个UserDao接口 public interface UserDao { public void getUser(); } 再去 ...

  3. .net持续集成sonarqube篇之 sonarqube集成单元测试

    系列目录 通过前面章节我们可以看到,不论怎么构建,单元测试覆盖率一栏总是0% 这是因为单元测试覆盖率报告需要额外集成.这一节我们就讲解如何在sonarqube里集成单元测试覆盖率报告. 这里需要借助O ...

  4. manjaro配置记录

    一.换源 官方镜像源(包括 core, extra, community, multilib ) sudo pacman-mirrors -i -c China -m rank //更新镜像排名 su ...

  5. Android的简述

    程序截图 先来简单了解下程序运行的效果 程序入口点  类似于win32程序里的WinMain函数,Android自然也有它的程序入口点.它通过在AndroidManifest.xml文件中配置来指明, ...

  6. thymeleaf常用属性

    转 作者:ITPSC 出处:http://www.cnblogs.com/hjwublog/   th:action 定义后台控制器路径,类似<form>标签的action属性. 例如: ...

  7. IntelliJ IDEA 2019.2最新解读:性能更好,体验更优,细节处理更完美!

    idea 2019.2 准备 idea 2019.2正式版是在2019年7月24号发布的,本篇文章,我将根据官方博客以及自己的理解来进行说明,总体就是:性能更好,体验更优,细节处理更完美! 支持jdk ...

  8. java连接mysql数据库jdbc

    jdbc.driver = com.mysql.jdbc.Driverjdbc.url = jdbc:mysql://localhost:3306/数据库名jdbc.username = rootjd ...

  9. TIJ读书笔记-第21章-并发

    一本Think in java,从去年6月份开始读,读了快一年了,也快读完了,然而回头想想,却好像什么也不记得了,好记性不如烂笔头,那就从现在开始记录一下吧.由于现在在读的是并发,那就先从这章开始吧. ...

  10. VS、C#配置R语言开发环境

    R语言学习笔记(一)——在Vs.C#中配置R语言开发环境. 最近在学习小众的R语言,所以将遇到的问题记录下来供大家参考,不足之处欢迎大家交流指正. 至于R语言的介绍就不多说了,它集成了复杂的数学算法, ...