深入理解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 相关文章推荐
Python中subprocess模块用法实例详解
May 20 Python
Python方法的延迟加载的示例代码
Dec 18 Python
Python绘制七段数码管实例代码
Dec 20 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
python实现横向拼接图片
Mar 23 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
Python 中Operator模块的使用
Jan 30 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
详解非极大值抑制算法之Python实现
Jun 28 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
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
JavaScript中的prototype使用说明
2010/04/13 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
python实现自动发送邮件
2018/06/20 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
Python帮你识破双11的套路
2019/11/11 Python
Python for i in range ()用法详解
2020/09/18 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
公司董事长职责
2013/12/12 职场文书
会计学专业自荐信
2014/06/25 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
人民调解协议书范本
2014/10/11 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
企业党建工作总结2015
2015/05/26 职场文书