深入理解Python对Json的解析


Posted in Python onFebruary 14, 2017

Json简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

它的格式一般是这样的:

对象是一个无序的“‘名称/值'对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值' 对”之间使用“,”(逗号)分隔。

例如下面这样:

{"b": "Hello", "c": null, "a": true}

它的值可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

深入理解Python对Json的解析

值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

使用Python编码和解析Json

Python内置了json包来帮助我们完成对json的操作。

将Python的字典结构导出到json使用json.dumps() ,将json读成Python的字典结构,使用json.loads()

如果不是针对string操作而是对文件操作,分别使用json.load()函数和json.dump()函数。

import json
 
data = {
 'name' : 'ACME',
 'shares' : 100,
 'price' : 542.23
}
 
json_str = json.dumps(data)
data = json.loads(json_str)
 
# Writing JSON data to file
with open('data.json', 'w') as f:
 json.dump(data, f)
 
# Reading data back
with open('data.json', 'r') as f:
 data = json.load(f)

默认的类型对应如下:

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

其他数据类型与Json之间的编码和解码

一般来说,Python对json的解析是list或dict之间的操作,如果需要其他类型与json之间转换,就需要object_hook参数。先定义一个类,将类的字典初始化成json的key-value键值对。这样,json的参数就变成了类的属性。

将一个JSON字典转换为一个Python对象Python

>>> class JSONObject:
...  def __init__(self, d):
...   self.__dict__ = d
...
>>>
>>> data = json.loads(s, object_hook=JSONObject)
>>> data.name
'ACME'
>>> data.shares
50
>>> data.price
490.1

还可以通过指定“函数”来进行转换。

用函数来指定序列化的方法,即将对象的“属性-值”对变成字典对,函数返回一个字典,然后json.dumps会格式化这个字典。

如果是通过函数将json变成对象,首先获得类名,然后通过__new__来创建一个对象(不调用初始化函数),然后将json字典的各个属性赋给对象。

使用函数指定json转换方式Python

def serialize_instance(obj):
 d = { '__classname__' : type(obj).__name__ }
 d.update(vars(obj))
 return d
 
# Dictionary mapping names to known classes
classes = {
 'Point' : Point
}
 
def unserialize_object(d):
 clsname = d.pop('__classname__', None)
 if clsname:
  cls = classes[clsname]
  obj = cls.__new__(cls) # Make instance without calling __init__
  for key, value in d.items():
   setattr(obj, key, value)
  return obj
 else:
  return d

使用方法如下:

>>> p = Point(2,3)
>>> s = json.dumps(p, default=serialize_instance)
>>> s
'{"__classname__": "Point", "y": 3, "x": 2}'
>>> a = json.loads(s, object_hook=unserialize_object)
>>> a
<__main__.Point object at 0x1017577d0>
>>> a.x
2
>>> a.y
3

总结

以上就是关于Python对Json解析的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
python清除字符串里非数字字符的方法
Jul 02 Python
详解Python的Django框架中的Cookie相关处理
Jul 22 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 Python
tensorflow使用神经网络实现mnist分类
Sep 08 Python
python实现转圈打印矩阵
Mar 02 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
Jul 01 Python
python数组循环处理方法
Aug 26 Python
基于Python制作一副扑克牌过程详解
Oct 19 Python
神经网络训练采用gpu设置的方式
Mar 03 Python
pytorch实现ResNet结构的实例代码
May 17 Python
python中取整数的几种方法
Nov 07 Python
Python 2与Python 3版本和编码的对比
Feb 14 #Python
利用Python爬虫给孩子起个好名字
Feb 14 #Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
Feb 14 #Python
让python 3支持mysqldb的解决方法
Feb 14 #Python
python用装饰器自动注册Tornado路由详解
Feb 14 #Python
利用python程序生成word和PDF文档的方法
Feb 14 #Python
Python中类型检查的详细介绍
Feb 13 #Python
You might like
php中通过curl smtp发送邮件
2012/06/05 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
一文总结学习Python的14张思维导图
2017/10/17 Python
分析python请求数据
2018/08/19 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
导致python中import错误的原因是什么
2020/07/01 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
房地产推广策划方案
2014/05/19 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
亲情作文之母爱
2019/09/25 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python