• json.dump()和json.dmups()的区别


    在python中支持json合适的数据是通过json模块实现的。

    在序列化json数据的时候遇到两个形状很像的函数,dump()和dumps()。主要说说他们的区别

    先看看官方文档的说明:https://docs.python.org/3.6/library/json.html#json.dump, 我们摘出两段来看看

    19.2.1. Basic Usage

    json.dump(objfp*skipkeys=Falseensure_ascii=Truecheck_circular=Trueallow_nan=Truecls=Noneindent=Noneseparators=Nonedefault=Nonesort_keys=False**kw)

    Serialize obj as a JSON formatted stream to fp (a .write()-supporting file-like object) using this conversion table.

    If skipkeys is true (default: False), then dict keys that are not of a basic type (strintfloatboolNone) will be skipped instead of raising a TypeError.

    The json module always produces str objects, not bytes objects. Therefore, fp.write() must support str input.

    .

    .

    后面就不用看了,我们从这能看出来,dump()是把一个对象序列化为一个json格式的流,并把这个流给到了fp,fp也是有要求的:一个file_like对象,并且支持write()方法。

    通过这个解释我们大概能想明白,无非是一个文件或者IO流对象 如 BytesIo 或 StringIo对象,我们用三种对象都来试一下:

     1 json.dump({'name':'fanyuchen'}, fp=open('C:\Users\fyc\Desktop\json1.txt', 'w'))         
     2 with open('C:\Users\fyc\Desktop\json1.txt', 'r') as f:
     3     print(f.read())
     4 
     5 strIo = StringIO()
     6 json.dump({'name':'fanyuchen'}, strIo)
     7 print(strIo.getvalue())
     8 
     9 bytIo = BytesIO()
    10 json.dump({'name':'fanyuchen'}, bytIo)
    11 print(bytIo.read())

    运行结果:文件和StringIo对象都可以,但是ByteIo对象报错,原因也是明显的,既然要用到参数bytIo的write()方法,就要按照人家的路子来,然而BytesIo的write()方法需要接受一个 bytes_likes对象,json显然不像 bytes_likes

    Traceback (most recent call last):
    File "C:/Users/fyc/liaoxuefeng/base.py", line 520, in <module>
    json.dump({'name':'fanyuchen'}, bytIo)
    File "C:Python36libjson\__init__.py", line 180, in dump
    fp.write(chunk)
    TypeError: a bytes-like object is required, not 'str'

    所以总结一下:dump()把一个对象按json格式序列化,可以写入文件,也可以写入StringIo类型

    再来看json.dumps()的用法,依然是先看文档

    json.dumps(obj*skipkeys=Falseensure_ascii=Truecheck_circular=Trueallow_nan=Truecls=Noneindent=Noneseparators=Nonedefault=Nonesort_keys=False**kw)

    Serialize obj to a JSON formatted str using this conversion table. The arguments have the same meaning as in dump().

    dumps()比较简单,说的很明确, 把一个对象按照json格式序列化为一个字符串。所以用起来也简单:

    1 d = dict({'name':'fanyuchen'})
    2 print(json.dumps(d))
  • 相关阅读:
    nvm的安装与使用
    webpack中import动态设置webpackChunkName方法
    css在背景图下加渐变色
    js实现时间戳转换
    js实现随机数和随机数组
    js实现导航自动切换请求数据
    jq、js获取select中option上的value值以及文本值
    js、jq实现select 下拉选择更多
    软件测试
    php
  • 原文地址:https://www.cnblogs.com/fanyuchen/p/7234296.html
Copyright © 2020-2023  润新知