zoukankan      html  css  js  c++  java
  • 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))
  • 相关阅读:
    button label textfield对齐 textview UI样式
    iOS真机测试
    Android学习
    CoreMontion加速计
    一些用xib加载主界面的过程
    英特尔公司
    CISC和RISC
    Terminating app due to uncaught exception 'NSGenericException' 类崩溃文章收集
    UICollectionView 介绍 <转>
    流媒件应用FreeStreamer 学习2
  • 原文地址:https://www.cnblogs.com/fanyuchen/p/7234296.html
Copyright © 2011-2022 走看看