json.dumps() 和 json.loads()

参考网址:原文链接!!!!在此!!!
一半是对上面网址的解读,一半是夹带 私货。

自码留存,怕自己忘了,没什么别的目的。
环境python2.7

json.dumps()

python代码:

json.dumps() :将字典转化为字符串
json.loads() :将字符串转化为字典

字典:键值对的形式

dict = {
"name":"zhangsan",
"age":24
}

json.dumps()之后变成了字符串

import json
dict = {"name":"zhangsan","age":24}
dict1 = json.dumps(dict)
print(type(dict1))  # <class 'str'>

其实打印出来的效果是一样的,就是类型变了。
可以json.dumps()之后加在url的后面,作为数据传输
比如:

url = "https://blog.csdn.net/"

如果我们需要传一个json参数来调用接口,形如:

  url = "https://blog.csdn.net/json?{"name":"zhangsan","age":24}"

这时候就把定义的字典转换为字符,然后加在url后就行:

import json
dict = {"name":"zhangsan","age":24}
dict1 = json.dumps(dict)
print(type(dict1))  # <class 'str'>
url = "https://blog.csdn.net/json?"+dict1

2、json.loads()

当字符串不是json字典格式的字符串的时候,执行json.loads会报错!

代码演示:
1、正确的格式
import json
dict = '{"name":"zhangsan", "age":24}'
dict1 = json.loads(dict)
print(type(dict1)) # <class 'dict'>

2、错误的格式
import json
dict = "{'name':'zhangsan', 'age':24}"
dict1 = json.loads(dict)
print(type(dict1)) # 报错信息json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

上面两种格式的唯一差异就是dict字典的单引号、双引号调换用,那为什么2中就报错呢?

先看报错信息,翻译过来就是“期望用双引号括起来的属性名称”,为什么呢?

因为,json数据的格式有严格要求:json中的(key)属性名称和字符串值需要用双引号引起来,用单引号或者不用引号会导致读取数据错误。

json有两种格式:
1. 对象格式:
{
   "name":"tom",
   "age":18
}

2. 数组格式:
["tom",18,"programmer"]

3、数组

数组格式的也可以用上面的两种方法进行转换

代码演示:
import json
lsit = [1,4,"hello zhuhai"]
lsit1 = json.dumps(lsit)
print(type(lsit1)) # <class 'str'>

lsit = '[1,4,"hello zhuhai"]'
lsit1 = json.loads(lsit)
print(type(lsit1)) # <class 'list'>

json中的(key)属性名称和字符串值一定要使用双引号引起来
单引号会导致错误。

4.进阶用法——中文和编码

 post_data = json.dumps(post_data, ensure_ascii=False, separators=(',',':'))  

如果不加上ensure_ascii=False的话,

>>> import json
>>> print json.dumps('中国')
"\u4e2d\u56fd"

输出的会是
‘中国’ 中的ascii 字符码,而不是真正的中文。
因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False:

而python3里这样的问题会少很多。
separators=(',',':') 规定了 变成字符串的形式
你也可以用 separators=(', ',' : ') 这样你的字符串里就会多一些空格。你可以自己尝试一下。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值