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下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...
随机推荐
- Python之面向对象二
面向对象的三大特性: 继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 c ...
- 这次彻底理解了Object这个属性
1.实例化Object对象 实例化Object对象的方式有两种:使用Object构造器和使用对象的字面量.例如: var person1 = { name: '李四' }; var person2 = ...
- 改变textField的placeholder的颜色和位置
重写UItextField的这个方法,用其他的textField继承自这个父类 - (void) drawPlaceholderInRect:(CGRect)rect { [[UIColor blue ...
- POJ-2109 Power of Cryptography(数学或二分+高精度)
题目链接: https://vjudge.net/problem/POJ-2109 题目大意: 有指数函数 k^n = p , 其中k.n.p均为整数且 1<=k<=10^9 , 1< ...
- POJ-1753 Flip Game---二进制枚举子集
题目链接: https://vjudge.net/problem/POJ-1753 题目大意: 有4*4的正方形,每个格子要么是黑色,要么是白色,当把一个格子的颜色改变(黑->白或者白-> ...
- 极速下载百度网盘-吴水成老师的-dubbo课程
极速下载百度网盘-吴水成老师的-dubbo课程,极速下载百度网盘-吴水成老师的-dubbo课程,极速下载百度网盘-吴水成老师的-dubbo课程,极速下载百度网盘-吴水成老师的-dubbo课程 先看主目 ...
- 闲聊 Exp/Imp 命令使用
1.Exp/Imp 命令可用的参数: 2.userid 参数必须跟在 Exp/Imp 命令的后面,可以省略,如 Exp Userid=用户名/密码@数据库实例名 或者 Exp 用户名/密码@数据库实例 ...
- jQuery的ajax学习
jQuery是一个非常常见的JavaScript库,可是,突然发现其实自己大多数时候,潜意识里面对它其实是视而不见的,比如它的ajax,不是没用过,每次使用,要不,是直接套用已有的格式,要不直接从官网 ...
- PHPCMS v9.6.0 wap模块 SQL注入
调试这个漏洞的时候踩了个坑,影响的版本是php5.4以后. 由于漏洞是由parse_str()函数引起的,但是这个函数在gpc开启的时候(也就是php5.4以下)会对单引号进行过滤\' . 看这里: ...
- Python 装饰器示例
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ # Author:taoke def applePrice(func): def otherfunc(): ...