• 售前

  • 售后

热门帖子
入门百科

Python剖析JSON对象的全过程记载

[复制链接]
向往草原403 显示全部楼层 发表于 2021-10-26 13:44:46 |阅读模式 打印 上一主题 下一主题
媒介

本章节我们将为各人先容怎样利用 Python 语言来编码息争码 JSON 对象。
json处置惩罚模块的主要使命,是将一个JSON对象,转换成Python数据范例数据进行处置惩罚,或者反之,将Python数据范例数据,转换成JSON对象(字符串流),在差别的模块或者系统间传输。
1. JSON数据格式特点


      
  • 对象表示为键值对  
  • 数据由逗号分隔  
  • 花括号生存对象  
  • 方括号生存数组
  1. {
  2. "students": [
  3. { "name":"北山啦" , "age":20 },
  4. { "name":"张三" , "age":30 },
  5. { "name":"里斯" , "age":17 }
  6. ]
  7. }
复制代码
  1. {'students': [{'name': '北山啦', 'age': 20},
  2. {'name': '张三', 'age': 30},
  3. {'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字符串的方法。
下面我们先来看一个简单的例子。
  1. import jsondata = {
  2. "students": [
  3. { "name":"北山啦" , "age":20 },
  4. { "name":"张三" , "age":30 },
  5. { "name":"里斯" , "age":17 }
  6. ]
  7. }print(type(data))print(data)json_str = json.dumps(data)print(type(json_str))
复制代码
  1. <class 'dict'>{'students': [{'name': '北山啦', 'age': 20},
  2. {'name': '张三', 'age': 30},
  3. {'name': '里斯', 'age': 17}]}<class 'str'>
复制代码
上面的例子中,固然看起来数据没有发生变化,但实在它们的数据范例已经发生了本质的改变:将字典数据范例的data,转换成了str范例,然后我们就可以将这个str范例的数据转换成流,在网络上进行传输或者写入到文件等。
  1. import jsondata = {
  2. "students": [
  3. { "name":"北山啦" , "age":20 },
  4. { "name":"张三" , "age":30 },
  5. { "name":"里斯" , "age":17 }
  6. ]
  7. }print(type(data))print(data)json_str = json.dumps(data, separators=('>>','::'), indent=2)print(json_str)
复制代码
  1. <class 'dict'>{'students': [{'name': '北山啦', 'age': 20},
  2. {'name': '张三', 'age': 30},
  3. {'name': '里斯', 'age': 17}]}{ "students"::[ { "name"::"\u5317\u5c71\u5566">> "age"::20 }>> { "name"::"\u5f20\u4e09">> "age"::30 }>> { "name"::"\u91cc\u65af">> "age"::17 } ]}
复制代码
将data写入txt文件中
  1. import jsondata = {
  2. "students": [
  3. { "name":"北山啦" , "age":20 },
  4. { "name":"张三" , "age":30 },
  5. { "name":"里斯" , "age":17 }
  6. ]
  7. }with open("students.txt","w") as fp: json.dump(data, fp, ensure_ascii=False) print("finish")
复制代码
  1. finish
复制代码
如许就将data写入了students.txt,看看是不是已经将数据写进去了。
3.2 反系列化
从JSON数据转换到Python范例数据,叫反系列化。可以通过loads()/load()这两个方法来完成。
  1. import json
  2. with open("students.txt") as fp:
  3. data = json.load(fp)
  4. """取出字典key为students的数据,
  5. 得到一个list,再从这个list中取第一个数据"""
  6. print(data['students'][0])
复制代码
  1. {'name': '北山啦', 'age': 20}
复制代码
parse_int参数
默认值为None,如果指定了parse_int,用来对JSON int字符串进行解码,这可以用于为JSON整数利用另一种数据范例或剖析器。
parse_int参数,这里我们简单将其指定为float范例。
  1. import json
  2. with open("students.txt") as fp:
  3. data = json.load(fp, parse_int = float)
  4. print(data)
复制代码
  1. {'students': [{'name': '北山啦', 'age': 20.0}, {'name': '张三', 'age': 30.0}, {'name': '里斯', 'age': 17.0}]}
复制代码
可以看到,age原来是整数范例,通过parse_int已经被转换成了float范例。
object_hook
默认值为None,object_hook是一个可选函数,此功能可用于实现自定义解码器。指定一个函数,该函数负责把反序列化后的根本范例对象转换成自定义范例的对象。
  1. def fromJSON(dct): # 这里会对所有的字典数据类型都进行遍历
  2. if isinstance(dct, dict) and 'students' in dct:
  3. return dct['students']
  4. else:
  5. return Student(dct['name'], dct['age'])
  6. import json
  7. with open("students.txt") as fp:
  8. data = json.load(fp, object_hook=fromJSON)
  9. print(data)
复制代码
  1. [姓名: 北山啦, 年龄: 20, 姓名: 张三, 年龄: 30, 姓名: 里斯, 年龄: 17]
复制代码
总结

到此这篇关于Python剖析JSON对象的文章就先容到这了,更多相关Python剖析JSON对象内容请搜刮草根技能分享从前的文章或继承欣赏下面的相关文章希望各人以后多多支持草根技能分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作