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
    评论
### 回答1: json.dumps 将 Python 对象转换为 JSON 字符串,而 json.loads 将 JSON 字符串转换为 Python 对象。更具体地说,json.dumps 接受一个 Python 对象,并返回一个 JSON 字符串,而 json.loads 接受一个 JSON 字符串,并返回一个 Python 对象。这两个方法都是在序列化(将 Python 对象转换为 JSON 字符串)和反序列化(将 JSON 字符串转换为 Python 对象)之间进行转换的重要工具。 ### 回答2: json.dumps和json.loads是Python的json模块中的两个函数,用于处理JSON数据格式。 json.dumps函数是将Python对象转换为JSON格式的字符串。它接受一个对象作为参数,可以是字典、列表、元组等等。函数会将对象转换为相应的JSON格式表示,并返回一个字符串。该函数还可以接受一些参数,如indent、sort_keys等,用于控制生成的JSON字符串的格式。 json.loads函数是将JSON格式的字符串转换为Python对象。它接受一个JSON格式的字符串作为参数,并将其转换为相应的Python对象,如字典、列表等。如果传入的JSON字符串格式不正确,函数会抛出一个异常。 这两个函数的主要区别在于作用方向和参数的不同。json.dumps将Python对象转换为JSON格式的字符串,而json.loads将JSON格式的字符串转换为Python对象。json.dumps可以接受一些参数用于控制生成的JSON字符串的格式,而json.loads不接受任何参数。 示例: ```python import json # 将Python对象转换为JSON格式的字符串 data = {'name': 'Alice', 'age': 20} json_str = json.dumps(data) print(json_str) # 输出: {"name": "Alice", "age": 20} # 将JSON格式的字符串转换为Python对象 json_str = '{"name": "Bob", "age": 25}' data = json.loads(json_str) print(data) # 输出: {'name': 'Bob', 'age': 25} ``` 综上所述,json.dumps和json.loads是json模块的两个函数,分别用于将Python对象转换为JSON格式的字符串和将JSON格式的字符串转换为Python对象。它们在作用方向和部分参数上有所不同。 ### 回答3: json.dumps和json.loads都是Python中用于处理JSON数据的函数,但它们之间有一些区别。 json.dumps函数是将Python对象转换为JSON格式的字符串。它接受一个Python对象作为参数,然后将其转换为JSON格式的字符串。例如: ```python import json data = {'name': 'Alice', 'age': 25} json_string = json.dumps(data) print(json_string) ``` 输出: ```json {"name": "Alice", "age": 25} ``` 可以看到,json.dumps函数将字典对象转换为了JSON格式的字符串。 json.loads函数则是将JSON格式的字符串转换为Python对象。它接受一个JSON格式的字符串作为参数,然后将其转换为Python对象。例如: ```python import json json_string = '{"name": "Alice", "age": 25}' data = json.loads(json_string) print(data['name']) print(data['age']) ``` 输出: ``` Alice 25 ``` 可以看到,json.loads函数将JSON格式的字符串转换为了Python字典对象。 因此,json.dumps和json.loads的区别在于一个将Python对象转换为JSON格式的字符串,而另一个将JSON格式的字符串转换为Python对象。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值