python解析json文件之简介
一、JSON简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
JSON建构于两种结构:
“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
二、引用模块
import json
三、相关函数
1.编码(encode):把一个python对象编码转换成json字符串 json.dumps()
2.解码(decode):把json格式字符串解码转换成python对象 json.loadS()
四、具体实例
实例一:json.dumps()
import json
s = json.loads('{"name":"test","type":{"name":"seq","parameter":["1","2"]}}')
print type(s)
print s.keys()
print s["name"]
print s["type"]
print s["type"]["name"]
程序执行结果如下:
<type 'dict'>
[u'type', u'name'] #此处输出结果:可以看出字典是无序的
test
{u'parameter': [u'', u''], u'name': u'seq'}
seq
实例二:json.dumps() json.loads()
import json
data = {'a':123,'b':[1,2]}
d1 = json.dumps(data)
print type(data)
print type(d1)
print len(d1)
print d1
for i in range(len(d1)):
print d1[i]
d2 = json.loads(d1)
print type(d2)
print d2
print d2.keys()
print d2.values()
for k in d2.keys():
print k,d2[k]
实例三
import json #encode
obj = [[1,2,3],123,123.123,'abc',{'key1':(1,2,3),'key2':(4,5,6)}]
print type(obj)
encodedjson = json.dumps(obj)
print type(encodedjson)
print len(encodedjson)
print repr(obj)
print encodedjson #decode
decodejson = json.loads(encodedjson)
print type(decodejson)
print decodejson[4]['key1']
print decodejson
程序执行结果:
<type 'list'>
<type 'str'>
72
[[1, 2, 3], 123, 123.123, 'abc', {'key2': (4, 5, 6), 'key1': (1, 2, 3)}]
[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}]
<type 'list'>
[1, 2, 3]
[[1, 2, 3], 123, 123.123, u'abc', {u'key2': [4, 5, 6], u'key1': [1, 2, 3]}]
通过输出的结果可以看出,简单类型通过encode之后跟其原始的repr()输出结果非常相似,但是有些数据类型进行了改变,例如上例中的元组则转换为了列表。在json的编码过程中,会存在从python原始类型向json类型的转化过程,具体的转化对照如下:

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

json.dumps方法提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的),separators,indent等参数。
五、排序
data1 = {'b':789,'c':456,'a':123}
data2 = {'a':123,'b':789,'c':456}
print type(data1)
print type(data2)
d1 = json.dumps(data1,sort_keys=True)
print type(d1)
print d1
#此处是for循环,将json字符串打印输出
print len(d1)
for i in range(30):
print d1[i]
for i in range(len(d1)):
print d1[i]
需要注意的知识点:当字典转换成json字符串之后,每一个字符都是一个单独的元素,和我们通常意义上理解的字符串就不同了,不过依然可以通过下标的方式来进行获取
完整的代码如下:
data1 = {'b':789,'c':456,'a':123}
data2 = {'a':123,'b':789,'c':456}
print type(data1)
print type(data2)
d1 = json.dumps(data1,sort_keys=True)
print type(d1)
d2 = json.dumps(data2)
print type(d2)
d3 = json.dumps(data2,sort_keys=True)
print d1
print d2
print d3
print d1 == d2
print d1 == d3
程序输出结果:
<type 'dict'>
<type 'dict'>
<type 'str'>
<type 'str'>
{"a": 123, "b": 789, "c": 456}
{"a": 123, "c": 456, "b": 789}
{"a": 123, "b": 789, "c": 456}
False
True
说明:
本来data1和data2数据应该是一样的,但是由于dict存储的无序特性,造成两者无法比较。因此两者可以通过排序后的结果进行存储就避免了数据比较不一致的情况发生,
但是排序后再进行存储,系统必定要多做一些事情,也一定会因此造成一定的性能消耗,所以适当排序是很重要的
六、缩进参数
import json
data1 = {'b':789,'c':456,'a':123}
d1 = json.dumps(data1,sort_keys=True,indent=4)
print type(data1)
print type(d1)
print d1
print len(d1) #for循环:依次将json字符串打印输出
for i in range(len(d1)):
print d1[i]
程序执行结果如下:
<type 'dict'>
<type 'str'>
{
"a": 123,
"b": 789,
"c": 456
}
indent参数是缩进的意思,它可以使得数据存储的格式变得更加优雅
七、压缩
import json
a = {'a': 123,'c': 456,'b': 789}
print type(a)
print a
print len(repr(a)) b = json.dumps(a,separators=(',',':'))
print type(b)
print b
print len(repr(b))
程序执行结果:
<type 'dict'>
{'a': 123, 'c': 456, 'b': 789}
30
<type 'str'>
{"a":123,"c":456,"b":789}
27
八、参考文章
http://www.cnblogs.com/kaituorensheng/p/3877382.html
http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html
python解析json文件之简介的更多相关文章
- python解析jSON文件
一.jSON文件 http://baike.baidu.com/link?url=wYeeLnhpXX-Tt8AoBRSNPh2P7Z2YHyK2tdD1tbBOQMfJIpA-YNHMOg2ZN6a ...
- python解析json文件报错No JSON object could be decoded
2017-04-25 可用Nodepad++将json文件打开并以UTF8无BOM格式保存.
- python解析json文件信息到csv中
json格式多种多样,本代码着重看函数部分 import json, csv, os import pandas as pd josns_root = 'jsons' csvs_root = 'csv ...
- python 解析json loads dumps
认识 引用模块 重要函数 案例 排序 缩进参数 压缩 参考 认识 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standa ...
- python脚本解析json文件
python脚本解析json文件 没写完.但是有效果.初次尝试,写的比较不简洁... 比较烦的地方在于: 1,中文编码: pSpecs.decode('raw_unicode_escape') 2,花 ...
- 使用Python解析JSON数据的基本方法
这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下: ----------------------------------- ...
- Android--------使用gson解析json文件
##使用gson解析json文件 **json的格式有两种:** **1. {}类型,及数据用{}包含:** **2. []类型,即数据用[]包含:** 下面用个例子,简单的介绍gson如何解析jso ...
- JAVA简便解析json文件
JAVA简便解析json文件 首先放上我要解析的json文件: { "resultcode":"200", "reason":"S ...
- Python解析Wav文件并绘制波形的方法
资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...
随机推荐
- linux搭建django项目基本步骤
一 linux下django基本项目搭建流程:M model 用于与数据库交互V view 接受前台请求 调用model获取结果,调用T获取页面,返回给前台T template 接受view的要求 生 ...
- SpringBoot集成Mybatis
1.创建SpringBoot工程 根据 http://www.cnblogs.com/vitasyuan/p/8765329.html 说明创建SpringBoot项目. 2.添加相关依赖 在pom. ...
- python开发:初识python
python简介 Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube.D ...
- Spring Data Jpa简单了解
原文来源:http://www.cnblogs.com/xuyuanjia/p/5707681.html 以下是自己简单整理原有文章,其实就是在原来文章基础上化重点以及可能会有所删减的方式进行整理,需 ...
- windows系统设置虚拟机开机自启并运行虚拟系统
简述 很多用windows系统电脑开发的童鞋,会在自己电脑上装一个虚拟机,然后在装一个linux系统当作服务器来使用. 但每次电脑开机都要去重启一下虚拟机电源,实在是不划算.下面博主教大家在windo ...
- 【VB超简单入门】四、编译工程及传播程序文件
四.编译工程及传播程序文件 为什么在这一章中讲到编译这部分内容呢?因为当我们学会怎样用VB开发程序之后,内心肯定喜悦无比.这时候就要和朋友分享一下快乐,所以要先学习编译EXE程序文件. 首先新建工程. ...
- 【H5-移动端开发】外部唤起本机APP的解决方法
太长时间没来博客园,原因很简单啊--太懒了!罪过罪过~ 最近公司的APP项目开始运行,采用的是原生框架+内嵌H5页面.作为一个菜鸡前端,开始入手学习移动端的界面制作加载性能优化.由于公司开始推广软件, ...
- maven中scope标签以及exclusions 记录
scope的分类 1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖.打包的时候通常需要包含进去 2.test:依赖项目仅仅参与 ...
- Spring(4)——面向切面编程(AOP模块)
Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...
- ProxySQL 读写分离实践
前言 ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎.具有以下特性: 连接池,而且是 multiplexing 主机和用户的最大连接数限制 自动下线后端DB 延迟超过阀值 ping ...