Python解析JSON对象的全过程记录

前言

本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象。

json处理模块的主要任务,是将一个JSON对象,转换成Python数据类型数据进行处理,或者反之,将Python数据类型数据,转换成JSON对象(字符串流),在不同的模块或者系统间传输。

1. JSON数据格式特点

  1. 对象表示为键值对
  2. 数据由逗号分隔
  3. 花括号保存对象
  4. 方括号保存数组
{
 "students": [
 { "name":"北山啦" , "age":20 },
 { "name":"张三" , "age":30 },
 { "name":"里斯" , "age":17 }
 ]
}
{'students': [{'name': '北山啦', 'age': 20},
 {'name': '张三', 'age': 30},
 {'name': '里斯', 'age': 17}]}

上面就是一个JSON格式数据。它开起来就像是在Python中的字典数据类型。我们可以通过json模块将它转换成字符串或者反过来将字符串转换成字典数据类型。

JSON也支持各种数据类型,它的数据类型和Python各种数据类型之间的对比如下:

  • object —— dict
  • array —— list
  • string —— str
  • number —— int/float
  • true/false —— True/False
  • null —— None

2. 常用方法总结

在json模块中,用于处理json的主要是四个函数,分别是:

  • loads():从JSON字符串中读取数据并转换成Python数据类型
  • load():从JSON文件中读取数据并转换成Python数据类型
  • dumps():将Python数据类型数据转换成JSON字符串
  • dump():将Python数据类型数据转换成JSON字符串写入到文件

3. 系列化和反系列化

从JSON数据转换到Python数据,叫反系列化(deserialization)

从Python数据转换到JSON数据,叫系列化(serialization)

3.1 系列化

系列化:将Python数据转换成JSON字符串的方法。

下面我们先来看一个简单的例子。

import json

data = {
 "students": [
 { "name":"北山啦" , "age":20 },
 { "name":"张三" , "age":30 },
 { "name":"里斯" , "age":17 }
 ]
}
print(type(data))
print(data)
json_str = json.dumps(data)
print(type(json_str))
<class 'dict'>
{'students': [{'name': '北山啦', 'age': 20}, {'name': '张三', 'age': 30}, {'name': '里斯', 'age': 17}]}
<class 'str'>

上面的例子中,虽然看起来数据没有发生变化,但其实它们的数据类型已经发生了本质的改变:将字典数据类型的data,转换成了str类型,然后我们就可以将这个str类型的数据转换成流,在网络上进行传输或者写入到文件等。

import json

data = {
 "students": [
 { "name":"北山啦" , "age":20 },
 { "name":"张三" , "age":30 },
 { "name":"里斯" , "age":17 }
 ]
}

print(type(data))
print(data)
json_str = json.dumps(data, separators=('>>','::'), indent=2)
print(json_str)
<class 'dict'>
{'students': [{'name': '北山啦', 'age': 20}, {'name': '张三', 'age': 30}, {'name': '里斯', 'age': 17}]}
{
 "students"::[
 {
 "name"::"\u5317\u5c71\u5566">>
 "age"::20
 }>>
 {
 "name"::"\u5f20\u4e09">>
 "age"::30
 }>>
 {
 "name"::"\u91cc\u65af">>
 "age"::17
 }
 ]
}

将data写入txt文件中

import json

data = {
 "students": [
 { "name":"北山啦" , "age":20 },
 { "name":"张三" , "age":30 },
 { "name":"里斯" , "age":17 }
 ]
}
with open("students.txt","w") as fp:
 json.dump(data, fp, ensure_ascii=False)
 print("finish")

finish

这样就将data写入了students.txt,看看是不是已经将数据写进去了。

3.2 反系列化

从JSON数据转换到Python类型数据,叫反系列化。可以通过loads()/load()这两个方法来完成。

import json
with open("students.txt") as fp:
 data = json.load(fp)
 """取出字典key为students的数据,
 得到一个list,再从这个list中取第一个数据"""
 print(data['students'][0])

{'name': '北山啦', 'age': 20}

parse_int参数

默认值为None,如果指定了parse_int,用来对JSON int字符串进行解码,这可以用于为JSON整数使用另一种数据类型或解析器。

parse_int参数,这里我们简单将其指定为float类型。

import json
with open("students.txt") as fp:
 data = json.load(fp, parse_int = float)
 print(data)

{'students': [{'name': '北山啦', 'age': 20.0}, {'name': '张三', 'age': 30.0}, {'name': '里斯', 'age': 17.0}]}

可以看到,age原来是整数类型,通过parse_int已经被转换成了float类型。

object_hook

默认值为None,object_hook是一个可选函数,此功能可用于实现自定义解码器。指定一个函数,该函数负责把反序列化后的基本类型对象转换成自定义类型的对象。

def fromJSON(dct): # 这里会对所有的字典数据类型都进行遍历
 if isinstance(dct, dict) and 'students' in dct:
 return dct['students']
 else:
 return Student(dct['name'], dct['age'])

import json

with open("students.txt") as fp:
 data = json.load(fp, object_hook=fromJSON)
 print(data)

[姓名: 北山啦, 年龄: 20, 姓名: 张三, 年龄: 30, 姓名: 里斯, 年龄: 17]

总结

到此这篇关于Python解析JSON对象的文章就介绍到这了,更多相关Python解析JSON对象内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 深入理解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成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成. 它

  • 使用Python解析JSON数据的基本方法

    Python的json模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多. 下面演示如何将一个Python数据结构转换为JSON: import json data = { 'name' : 'ACME', 'shares' : 100, 'price' : 542.23 } json_str = json.dumps(data) 下面演示如何将一个JSON编码的字

  • Python读取JSON数据操作实例解析

    读写 JSON 数据 问题 你想读写 JSON(JavaScript Object Notation) 编码格式的数据. 解决方案 json模块提供给了一种很简单的方式来编码和解码json数据,其中两个主要的函数时json.dumps()和 json.loads() 下面演示如何将一个 Python 数据结构转换为 JSON: import json data = { 'name' : 'ACME', 'shares' : 100, 'price' : 542.23 }json_str = js

  • 深入解析Python编程中JSON模块的使用

    JSON编码支持的基本数据类型为 None , bool , int , float 和 str , 以及包含这些类型数据的lists,tuples和dictionaries. 对于dictionaries,keys需要是字符串类型(字典中任何非字符串类型的key在编码时会先转换为字符串). 为了遵循JSON规范,你应该只编码Python的lists和dictionaries. 而且,在web应用程序中,顶层对象被编码为一个字典是一个标准做法. JSON编码的格式对于Python语法而已几乎是完

  • python解析含有重复key的json方法

    python自带的json包能够方便的解析json文本,但是如果json文本中包含重复key的时候,解析的结果就是错误的.如下为例 {"key":"1", "key":"2", "key":"3", "key2":"4"} 经过解析,结果却如下所示: { "key":"3", "key2"

  • python中解析json格式文件的方法示例

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

  • python解析json实例方法

    最近在做天气业务的延时监控,就是每隔一个小时检查一次天气数据是否变化,三次不变化就报警.由于页面给的数据的以json格式的,所以如何解析页面上的数据,从而获得我们想要的字段是我们首先考虑的问题.一般来说,当我们从一个网页上拿下来数据,就是一个字符串,比如: 复制代码 代码如下: url_data = urllib2.urlopen(url).readline() 当我们这样得到页面数据,url_data是全部页面显示一个json字符串,那么我们如何将这个字符串转变为字典格式:time = jso

  • Python解析JSON对象的全过程记录

    前言 本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象. json处理模块的主要任务,是将一个JSON对象,转换成Python数据类型数据进行处理,或者反之,将Python数据类型数据,转换成JSON对象(字符串流),在不同的模块或者系统间传输. 1. JSON数据格式特点 对象表示为键值对 数据由逗号分隔 花括号保存对象 方括号保存数组 { "students": [ { "name":"北山啦" , "

  • 使用Python解析JSON的实现示例

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.Python3 中可以使用 json 模块来对 JSON 数据进行编解码,主要包含了下面4个操作函数: 提示:所谓类文件对象指那些具有read()或者 write()方法的对象,例如,f = open('a.txt','r'),其中的f有read()方法,所以f就是类文件对象.  在json的编解码过程中,python 的原始类型与JSON类型会相互转换,具体的转化对照如下: Python 编码为 J

  • Python解析JSON数据的基本方法实例代码

    目录 一.JSON数据格式介绍 二.Python处理JSON数据 json.dumps json.loads 语法 总结 一.JSON数据格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON建构于两种结构:json是Javascript中的对象和数组中的对象,本质上来讲就是有特定结构的字符串,所以可以通过这两种结构可以表示各种复杂的结构: 1 对象: 对象在js中表示为”{}”括起来的内容,数据结构为{key:value, key:v

  • python解析Chrome浏览器历史浏览记录和收藏夹数据

    目录 前言 (一)查询chrome数据缓存地址 (二)提取收藏夹数据 1.文件路径 2.解析代码 (三)查看浏览历史数据 1.文件路径 2.解析代码 (四)完整代码&测试代码 总结 前言 常使用chrome浏览器作为自己的默认浏览器,也喜欢使用浏览器来收藏自己的喜欢的有用的链接,自己也做了一个记录笔记的小脚本,想扩展收录chrome浏览器收藏夹的内容,,下面,,使用python提取chrome浏览器的历史记录,以及收藏夹. (一)查询chrome数据缓存地址 1.打开 chrome浏览器,输入

  • Python解析json文件相关知识学习

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

  • jquery遍历筛选数组的几种方法和遍历解析json对象

    jquery grep()筛选遍历数组 复制代码 代码如下: $().ready( function(){ var array = [1,2,3,4,5,6,7,8,9]; var filterarray = $.grep(array,function(value){ return value > 5;//筛选出大于5的 }); for(var i=0;i<filterarray.length;i++){ alert(filterarray[i]); } for (key in filtera

  • Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法

    下面说一下,最近在使用jquery 1.4中使用$.ajax()方法解析json对象遇到的问题. Json对象是: 复制代码 代码如下: [{name:'二手房出售',infoCount:0,pageUrl:'/ershoufang'},{name:'二手房求购',infoCount:0,pageUrl:'/qiugou'},{name:'二手房装修',infoCount:0,pageUrl:'/esfzhuangxiu'},{name:'二手回收',infoCount:0,pageUrl:'/

  • Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在

    1.jquery grep()筛选遍历数组(可以得到反转的数组) // 1.jquery grep()筛选遍历数组(可以得到反转的数组) var array = [1,5,9,3,12,4,48,98,4,75,2,10,11]; var filterArray = $.grep(array,(currentValue) => { return currentValue > 10; }); console.log(`${filterArray}---${filterArray.length}`

  • Python解析json时提示“string indices must be integers”问题解决方法

    本文实例讲述了Python解析json时提示"string indices must be integers"问题解决方法.分享给大家供大家参考,具体如下: import json,但是出现了一个奇怪的问题: string indices must be integers 这个错误告诉我,[ ]里面应该是数字而不是字符串,但是dict使用key访问也可以,这种错误感觉解析出来的结果像是一个list. 所以考虑是字符串解析的问题.打印解析的结果,是一长串的字符串,一堆的key挤在一起,v

  • python解析json串与正则匹配对比方法

    现在有如下格式的json串: "detail_time":"2016-03-30 16:00:00","device_id":"123456","os":"Html5Wap","session_flow_id":"1d1819f3-8e19-4597-b50d-ba379adcd8e5","user_longitude":0.0

随机推荐