美文网首页Python小哥哥Python学习记录python
用 Python 操作 JSON 类型数据详解

用 Python 操作 JSON 类型数据详解

作者: 我爱学python | 来源:发表于2019-05-15 16:25 被阅读98次

JSON简介

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

JSON官方网站

http://www.json.org/

JSON是一种基于文本,独立于语言的轻量级数据交换格式。JSON的基本语法如下:

1、JSON名称/值对。JSON 数据的书写格式是:名称/值对。名称/值对包括字段名称(在双引号中),然后着是一个冒号(:),最后是值。比如{ "name" : "Python" },类似于Python中的字典。

2、JSON值。JSON值可以是数字(整数或浮点数),字符串(在双引号中),逻辑值(True 或False),数组(在中括号中),对象(在大括号中)和null。例如{ "age": 21,"graduated ":true }。JSON值的基本格式如下图所示。

图 JSON值的基本格式

3、JSON对象。JSON 对象在花括号({})中书写,对象可以包含多个名称/值对,多个JSON名称/值以”,”进行分隔。例如{ "name":"Pyton" , "age": 25}。JSON对象的基本格式如下图所示。

图 JSON对象

4、JSON 数组。JSON 数组在方括号中书写,数组可包含多个JSON对象。例如:

在本例中对象”sites”是包含2个对象的数组。JSON数组的的基本格式如下图所示。

Python操作JSON

Pythone3标准库有JSON模块,主要执行序列化和反序列化功能。

序列化(encoding) : 把一个Python对象编码转化为JSON字符串。

反序列化(decoding):把JSON格式字符串解码转换为Python数据对象。

1、json模块的主要函数

在Python3的json模块中json.dumps()函数将Python对象编码成JSON字符串。使用的语法如下:

主要参数说明:

sort_keys:表示序列化JSON对象时是否对字典的key进行排序,字典默认是无序的。

indent:表示缩进,可以是数据格式可读性更强,格式化输出JSON字符串,如果ident是一个非负的整数,那么JSONarray元素和object成员将会被以相应的缩进级别进行打印输出。

separators:当使用ident参数时json模块序列化Python对象后得到的JSON字符串中的”,”号和”:”号分隔符后默认会附加一个空白字符,可以通过separators参数重新指定分隔符,去除无用的空白字符。指定的分隔符一般是一个元祖类型的数据,比如(',',':')。

使用json模块的json.load()函数,将JSON格式的字符串转换成Python对象,使用的语法格式如下:

2、JSON字符串与Python 原始类型之间数据类型对应关系

Python 原始类型向JSON类型的转化对照表,如表所示:

表 Python原始类型向JSON类型的转化对照表

JSON类型向Python 原始类型的转化对照表,如表所示:

表 JSON类型向Python原始类型的转化对照表

3、序列化操作实例

从返回结果可以看出data_json字符串中lang数据类型从元祖变成了列表。

还可以对打印的json字符进行美化,可以使用如下Python语句。

输出结果为

如果要对输出json字符串去除无用的空白字符,可以使用如下Python语句。

输出结果为:

{"age":20,"lang":["python","java"],"name":"wangwu"}

4、反序列化操作实例,把JSON格式字符串转换为Python对象

输出结果为:

从返回结果可以看出,解码后并没有将原始数据data_json的lang数据还原成元祖,而是还原成了列表。

自定义对象的序列化

如果是类对象,是不是可以可以直接用json.dumps(obj)序列化对象呢?答案是不可以的,需要在类对象里编写转换函数。

例子:自定义对象的序列化

运行脚本得到以下输出结果:

{"name":"tom","age":21}

json.dumps()函数中的可选参数default就是把任意一个对象变成一个可序列为JSON的对象,我们只需要为Man专门写一个转换函数,再把函数传进去即可。

通过一种简单的方式,用lambda方式来转换任意一个类对象为JSON形式。

jsonDataStr= json.dumps(man, default=lambda obj: obj.__dict__)

lambda obj: obj.__dict__会将任意的对象的属性,转换成字典的方式。同样的道理,如果要将JSON对象反序列化,也需要写个反序列化函数来转换。

在本例中编写反序列化函数handle()把JSON字符串转换成Python类的对象。

相关文章

  • 用 Python 操作 JSON 类型数据详解

    JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅...

  • Json

    json.loads() :将字符串转换为Python数据类型json.dumps() :将Python数据类型转...

  • Python数据类型详解02

    原文博客地址: Python数据类型详解02 上文Python数据类型详解01中主要介绍了Python中的一些常用...

  • python json模块与flask jsonify拓展包使用

    1.JSON数据格式 2.python处理JSON JSON数据格式转换成python的简单数据类型 python...

  • Python数据类型详解03

    原文博客地址: Python数据类型详解03 第一篇Python数据类型详解01中主要介绍了Python中的一些常...

  • 关于爬虫的一些解析数据的技巧

    eval解析适用于Python的数据类型 有些数据你咋眼望去以为他是json,其实不是,用json解析会报错,但是...

  • json、多任务

    json json.loads() : 将json字符串转化为Python数据类型json.dumps() : 将...

  • MySQL之JSON数据类型CRUD

    JSON数据类型: 从mysql5.7.8开始开始支持,json数据类型。可以通过客户端创建json字段表并操作检...

  • ajax

    ajax有关json的处理 json 要求返回的数据类型必须时json格式数据 注意,在python中如果直接返回...

  • FreeMaker遇到JSON格式数据

    FreeMaker渲染JSON格式数据: 先判断JSON数据是否为字符串。根据类型做不同的渲染操作

网友评论

    本文标题:用 Python 操作 JSON 类型数据详解

    本文链接:https://www.haomeiwen.com/subject/kropaqtx.html