python函数——json.loads、dumps、sort()、sorted

一、json.loads、dumps

json是JavaScript程序编写数据结构的原生方式,在Python中,字典的格式和json格式在显示上是一样的,但是字典是dict,而json是str。
在python中,json的key只能是字符串,即使字典中的key是整数,经过dumps之后,也会成字符串。

1、json.dumps()和json.loads()是json格式处理函数

(可以这么理解,json是字符串)
  (1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串
  (2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典

json.dumps( ) 和 jsonify ( ) 区别

   ( 1 )  jsonify 将数据格式转化为json格式,同时设置返回类型为:application/json

   ( 2 )  json.dumps ( ) 将数据格式转化为json格式,没有设置返回的数据类型,默认类型是:text/html
2、json.dump()和json.load()主要用来读写json文件函数

在Python中json是一个非常常用的模块,这个主要有4个方法:

json.dumps
json.dump
json.loads
json.load

如果json.dumps 转换成json时,字符串带u, 其实是Unicode字符串,去掉u 需要将字符串(是字符串,不是字典或者列表) 再次用utf-8进行编码,

   		response_data = {}
        server_data = ServerUtils.server_list_detail(Object_InteractionWithOpenstack)
        response_data['servers'] = server_data
        flavor_data = FlavorsUtils.flavors_list(Object_InteractionWithOpenstack)
        response_data['flavors'] = flavor_data
        temp_data = json.dumps(response_data, indent=4, ensure_ascii=False)
        res_data=temp_data.encode('utf-8')
3、loads方法与load方法的异同

1.1不相同点:
loads操作的是字符串 , 一般是将字符串转化为python对象
load操作的是文件流 , 一般是读取文件,将文件内容转换为python对象

1.2 相同点
除了第一个参数(要转换的对象)类型不同,其他所有的参数都相同
最终都是转换成Python对象
例子:

s = '{"name": "wade", "age": 54, "gender": "man"}'
# json.loads读取字符串并转为Python对象
print("json.loads将字符串转为Python对象: type(json.loads(s)) = {}".format(type(json.loads(s))))
print("json.loads将字符串转为Python对象: json.loads(s) = {}".format(json.loads(s)))

# json.load读取文件并将文件内容转为Python对象
# 数据文件要s.json的内容 --> {"name": "wade", "age": 54, "gender": "man"}
with open('s.json', 'r') as f:
    s1 = json.load(f)
    print("json.load将文件内容转为Python对象: type(json.load(f)) = {}".format(type(s1)))
    print("json.load将文件内容转为Python对象: json.load(f) = {}".format(s1))

在这里插入图片描述
转化为python对象
日常工作中最常见的就是把字符串通过json.loads转为字典,其实json的loads方法不仅可以把字符串转为字典,还可以转为任何Python对象。
比如说,转成python基本数据类型:

print('json.loads 将整数类型的字符串转为int类型: type(json.loads("123456"))) --> {}'.format(type(json.loads("123456"))))
print('json.loads 将浮点类型的字符串转为float类型: type(json.loads("123.456")) --> {}'.format(type(json.loads("123.456"))))
print('json.loads 将boolean类型的字符串转为bool类型: type(json.loads("true")) --> {}'.format((type(json.loads("true")))))
print('json.loads 将列表类型的字符串转为列表: type(json.loads(\'["a", "b", "c"]\')) --> {}'.format(type(json.loads('["a", "b", "c"]'))))
print('json.loads 将字典类型的字符串转为字典: type(json.loads(\'{"a": 1, "b": 1.2, "c": true, "d": "ddd"}\')) --> %s' % str(type(json.loads('{"a": 1, "b": 1.2, "c": true, "d": "ddd"}'))))

在这里插入图片描述

json模块会根据你的字符串自动转为最符合的数据类型
但是需要注意的是不能转为字符串,否则会报json.decoder.JSONDecodeError错误:

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

其余详解点击关于loads更多描述

二、 sort()和sorted()

1、sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法:list.sort( key=None, reverse=False)

key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
该方法没有返回值,但是会对列表的对象进行排序。

#!/usr/bin/python
 
# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
 
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
 
# 指定第二个元素排序
random.sort(key=takeSecond)
 
# 输出类别
print ('排序列表:', random)

输出:排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]

2、 sorted是个函数,sort是方法。

a = [1,4,5,6,7,123,4,5]
print(a)
a.sort()
print(a)
[1, 4, 5, 6, 7, 123, 4, 5]
[1, 4, 4, 5, 5, 6, 7, 123]
b = [1,4,5,6,7,123,4,5]
print(sorted(b))
print(b)
[1, 4, 4, 5, 5, 6, 7, 123]
[1, 4, 5, 6, 7, 123, 4, 5]

由此可知,sorted(b)的排序是临时的,如果不用变量接受就会被系统回收掉。而a.sort()则是永久的,此时的sort()是对象a的一个方法。

另外,sorted(b)有个默认的参数,reverse=False,如果使用reverse=True则会实现倒序输出。
总结:
sort 与 sorted 区别:
sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sort使用方法为ls.sort(),而sorted使用方法为sorted(ls)

sorted()语法:

sorted(iterable[, cmp[, key[, reverse]]])

参数说明:

iterable – 可迭代对象。
cmp – 比较的函数(python3中已被彻底移除),这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key – 主要是用来进行比较的元素(python2.4开始提供,之前采用cmp),只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。此函数将在每个元素比较前被调用。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回值

返回重新排序的列表。
实例:

>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a)       # 保留原列表
>>> a 
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
 
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))   # 利用cmp函数
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1])               # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
 
 
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2])            # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
 
>>> sorted(students, key=lambda s: s[2], reverse=True)       # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>>

以下实例展示了 sort 的使用方法:

>>>l:[('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)]
>>>l.sort(key=lambda x : x[1], reverse=True)
>>>l:[('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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是Pythonjson模块中的两个函数,用于处理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、付费专栏及课程。

余额充值