百度云智学院-打卡学习01

本文介绍了Python中处理JSON数据的方法,包括反序列化和序列化。json.loads()和json.load()用于将JSON字符串或文件转换为Python数据类型,而json.dumps()和json.dump()则用于将Python数据转换为JSON格式。特别地,文章讨论了object_hook和object_pairs_hook的区别,这两个参数用于自定义解码和保持键值对的顺序。
摘要由CSDN通过智能技术生成

day01-python Note 解析JSON数据

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

  • object —— dict
  • array —— list
  • string —— str
  • number —— int/float
  • true/false —— True/False
  • null —— None
    json处理模块的主要任务,是将一个JSON对象(表现为一个字符串流),转换成Python数据类型数据进行处理,或者反之,将Python数据类型数据,转换成JSON对象(字符串流),在不同的模块或者系统间传输。
  • 从JSON数据转换到Python数据,叫反系列化(deserialization)
  • 从Python数据转换到JSON数据,叫系列化(serialization)

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

  • loads():从JSON字符串中读取数据并转换成Python数据类型

  • load():从JSON文件中读取数据并转换成Python数据类型

  • dumps():将Python数据类型数据转换成JSON字符串

  • dump():将Python数据类型数据转换成JSON字符串写入到文件

  • 反系列化

    从JSON数据转换到Python类型数据,叫反系列化。可以通过loads()/load()这两个方法来完成。
    loads()的完整方法如下:loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

    • s:要反系列化的JSON字符串
    • encoding:指定字符编码格式
    • cls:指定自定义的JSON解码工具类
    • object_hook:将返回结果字典替换为你所指定的类型,这个功能可以用来实现自定义解码器
    • parse_float/parse_int:它如果被指定的话,在解码json字符串的时候,符合float、int、类型的字符串将被转为你所指定的类型
    • parse_constant:如果被指定的话,在解码json字符串的时候,如果出现以:-Infinity,Infinity,NaN那么指定的parse_constant函数将会被调用
    • object_pairs_hook:将结果以key-value有序列表的形式返回,形式如:[(k1, v1), (k2, v2), (k3, v3)]。如果object_hook和object_pairs_hook同时指定的话优先使用object_pairs_hook的格式
      load()方法和loads()方法类似,不过它没有encoding参数。另外它的第一个参数应该是一个file对象(或者其他流对象)

    json.loads的object_hook和object_pairs_hook的区别

区别是,

object_pairs_hook 的传入参数是有序的键值对表,而 object_hook 是无序的dict。并且两个参数都给的话,object_pairs_hook 的优先级要更高。

看一下官方3.6文档:

object_hook is an optional function that will be called with the result of any object literal decoded (a dict). The return value of object_hook will be used instead of the dict. This feature can be used to implement custom decoders (e.g. JSON-RPC class hinting).

object_pairs_hook is an optional function that will be called with the result of any object literal decoded with an ordered list of pairs. The return value of object_pairs_hook will be used instead of the dict. This feature can be used to implement custom decoders.If object_hook is also defined, the object_pairs_hook takes priority.

翻译一下:

object_hook是一个可选的函数,它将被任何对象字面值解码(dict)的结果调用。将使用object_hook的返回值而不是dict。这个功能可以用于实现自定义的解码器(例如,JSON-RPC类提示)。

object_pairs_hook是一个可选的函数,它将使用任何对象字面值的结果进行调用,并使用对的有序列表进行解码。将使用object_pairs_hook的返回值,而不是dict。该特征可以用于实现依赖于键和值对被解码的顺序的自定义解码器(例如,collections.OrderedDict()将记住插入的顺序)。如果还定义了object_hook,则object_pairs_hook优先。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值