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下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...
随机推荐
- 如何在命令行中让python2和python3同存
初学python,你可能同时安装了python2和3.在我们安装好python之后,我们会面临这样一个问题,在命令行输入"python",可能会出错,或者只能调用其中一个版本,py ...
- List里边存放Object对象获取方式
if (tableListt != null && tableListt.size() > 0) { for (int i = 0; i < tableListt.size ...
- Hive函数:rank()、dense_rank()
数据准备: G1,KING, G1,BING, G2,FING, G1,FORD, G2,SCOTT, G1,JONES, G2,BLAKE, G1,CLARK, G1,ALLEN, G1,CELL1 ...
- TSQL:A表字段与B表中的关联,关联条件中一列是随机关联的实现方式
A表字段与B表中的关联,关联条件中一列是随机关联的实现方式 create table test( rsrp string, rsrq string, tkey string, distan strin ...
- win10安装Ubuntu14.04双系统
1 制作镜像 UltralISO刻录镜像到U盘,下载地址:http://pan.baidu.com/s/1o7JpthS 2压缩空间给Ubuntu安装 使用windows自带的压缩(磁盘管理) 3安装 ...
- C# WinForm 富文本编辑器 用kindeditor实现本地图片只选取不上传到编辑器
以下资料有参考网上其它童鞋作品,原作者看到务喷!!!! 以下资料有参考网上其它童鞋作品,原作者看到务喷!!!! 重要的事只要说两遍... 网上找了几天关于WinForm富文本编辑效果都不理想,各种坑, ...
- .NET Core Community 首个千星项目诞生:CAP
项目简介 在我们构建 SOA 或者 微服务系统的过程中,我们通常需要使用事件来对各个服务进行集成,在这过程中简单的使用消息队列并不能保证数据的最终一致性, CAP 采用的是和当前数据库集成的本地消息表 ...
- ios开发-将false和true,当做字典的值,并将字典转成字符串,上传到服务器
今天遇到一个需求,将false和true,当做字典的值,并将字典转成字符串,上传到服务器. 可能这个需求大家遇到过,大部分原因是安卓的同事已经按这样的需求开发完了.我们只能跟随安卓的脚步了. (一)处 ...
- 深入解析 SQL Server 高可用镜像实现原理
作者:郭忆 本文由 网易云 发布. SQL Server 是 windows 平台 .NET 架构下标配数据库解决方案,与 Oracle.MySQL 共同构成了 DB-Engines Ranking ...
- 有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法
<Deep Learning>(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(ove ...