默认json_Json.dumps

json.dumps()可以把任意python对象encode成json字符串

json.dumps()的签名

json.dumps(obj, *,
    skipkeys=False,
    ensure_ascii=True,
    check_circular=True,
    allow_nan=True,
    cls=None,
    indent=None,
    separators=None,
    default=None,
    sort_keys=False,
    **kw
)

用法示例

import json

# dump list
data = ['foo', {'bar': ('baz', None, 1.0, 2)}]
json.dumps(data)
# output: '["foo", {"bar": ["baz", null, 1.0, 2]}]'

# dump str
obj = "hello, world!"
json.dumps(obj)
# output: '"hello, world!"'

# dump dict
data = {"c": 0, "b": 0, "a": 0}
json.dumps(data)
# output: '{"a": 0, "c": 0, "b": 0}'

# dump dict with sort
data = {"c": 0, "b": 0, "a": 0}
json.dumps(data, sort_keys=True)
# output: '{"a": 0, "b": 0, "c": 0}'

# dump dict with pretty print(打印的更好看些)
data = {"c": 0, "b": 0, "a": 0}
json.dumps(data, sort_keys=True, indent=4)
# output: '{n    "a": 0, n    "b": 0, n    "c": 0n}'

Python与JSON的类型对应

62e0c7b5d66278d7cf34e1d3f663a936.png

skipkeys

默认为False

则当被转换的对象是dict时,如果dict的过key不为Python基础类型(str, int, float, bool, None)时:

  • True:跳过
  • False:报TypeError错误

ensure_ascii

  • 默认为True:所以非ASCII字符会被转义
  • 否则维持原样

常见应用是关于中文字符输出的问题,输出真正的中文需要指定ensure_ascii=False

print(json.dumps('中国'))
# "u4e2du56fd"

print(json.dumps('中国', ensure_ascii=False))
# "中国"

check_circular

暂时不明白,先把官方文档说明贴出来,弄懂了再说

  • 默认值True:
  • the circular reference check for container types will be skipped and a circular reference will result in an OverflowError (or worse).

allow_nan

暂时不明白,先把官方文档说明贴出来,弄懂了再说

  • 默认值True: their JavaScript equivalents (NaN, Infinity, -Infinity) will be used.
  • 若为False: it will be a ValueError to serialize out of range float values (nan, inf, -inf) in strict compliance of the JSON specification.

cls

  • 默认使用JSONEncoder
  • 可指定自定义解析器(详情再叙)

indent

  • 当值为非负整数或str时:JSON array和object(对应python中的list、tuple和dict),会按照indent层级进行缩进,让我们更好地看清结构
data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print(json.dumps(data, sort_keys=True, indent=2))

输出:

[
  {
    "a": "A",
    "b": [
      2,
      4
    ],
    "c": 3.0
  }
  • 默认值(None) 输出紧凑的表达形式(还有更紧凑的形式,见seperators)
data = ['foo', {'bar': ('baz', None, 1.0, 2)}]
json.dumps(data)
# output: '["foo", {"bar": ["baz", null, 1.0, 2]}]'
  • 0, 负数或"":只会增加新行,而不进行缩进
  • 正整数:定义缩进数量(空格),下一级缩进会翻倍
  • str(如"t",制表符):该字符用来对每一级进行缩进

separators

提供分隔符,可以除去空白字符,使得输出更紧凑,数据更小

值的形式为tuple:(item_separator, key_separator),分别对应item的分隔符和key的分隔符

  • 当indent=None时, 默认值(', ', ': ')——注意逗号和分号后有一个空格
  • 否则默认(',', ': ')——注意逗号和分号后的空格没有了

为了最紧凑的数据,减少网络传输数据量,请使用(',', ': ')减少空白字符

default

暂时不明白,先把官方文档说明贴出来,弄懂了再说

If specified, default should be a function that gets called for objects that can’t otherwise be serialized. It should return a JSON encodable version of the object or raise a TypeError. If not specified, TypeError is raised.

sort_keys

  • 默认值False

· 当设置为True时,dict的输出会按key排序(按照字典排序a-z输出)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值