python对json的操作总结

python对json的操作总结

Json简介
  • Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式。Json最广泛的应用是作为Ajax中服务器与客户端进行通讯的数据格式。简洁和清晰的层次结构使得Json称为理想的数据交换语言。易于人编写和阅读,同时也易于机器解析和生成,并有效地提升了网络传输效率

  • python提供了json模块,通过该模块,可以将字符串形式的json数据转化为字典,也可以将python中的字典数据转化为字符串形式的json数据。python的json模块主要包含了两个功能函数:

    • json.dumps(): 将python对象编码为json字符串

    • json.loads(): 将json字符串解码为python对象

Python对象编码为Json对象
  • 将python对象编码为json对象,使用的是json模块中的dumps和dump函数,比较常使用的是dumps函数,它们之间的区别就是dumps将python对象编码为json对象后生成的是一个字符串,而dump则是生成一个文件流,这里以dumps函数为例进行说明,具体dumps和dump的区别见另一篇博客

  • dumps()的参数说明:

    skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key



    ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示



    indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json



    separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开



    sort_keys:将数据根据keys的值进行排序

  • 实例

python_dic1 = {'username': 'jiangnanmax', 'nickname': '江', 'major': 'CS'}
    json_dic1 = json.dumps(python_dic1)
    print(json_dic1)
    json_dic2 = json.dumps(python_dic1, sort_keys=True, indent=4, separators=(',', ': '),
                           ensure_ascii=False)
    print(json_dic2)

输出如下:
{"username": "jiangnanmax", "nickname": "\u6c5f", "major": "CS"}
{
    "major": "CS",
    "nickname": "江",
    "username": "jiangnanmax"
}
  • 观察对比上面的代码和运行结果,你会发现我定义的python对象中用的都是单引号,而经过dumps函数处理后就都变成了双引号。这是因为python中的json模块不支持使用单引号,在使用dumps函数的时候你可能不会发现有这个情况,继续往下看,在使用loads函数的时候我进行了对比
Json对象解码为Python对象
  • 将json对象解码为python对象,使用的是json模块中的loads和load函数,它们之间的区别与dumps和dump之间的区别相同,具体见另一篇博客

  • 实例

	python_dic1 = {'username': 'jiangnanmax', 'nickname': '江', 'major': 'CS'}
	json_dic1 = json.dumps(python_dic1, ensure_ascii=False)
	print(json_dic1)
	print(type(json_dic1))
	输出:
	{"username": "jiangnanmax", "nickname": "江", "major": "CS"}
	<class 'str'>
	
	python_dic2 = json.loads(json_dic1)
	print(python_dic2)
	print(type(python_dic2))
	输出:
	{'username': 'jiangnanmax', 'nickname': '江', 'major': 'CS'}
	<class 'dict'>
	
	python_dic2 = str(python_dic2) # 把dict类型转化为str类型
	print(json.loads(python_dic2))
	报错:
	json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
  • 注意:使用python标准库的json解析函数json.loads是不能使用单引号引用的json字符串的,你可以改用双引号,或者在loads之前先调用json.dumps()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JiangNanMax

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值