【jmespath】—2. 进阶 List and Slice Projections
2021/4/23 18:25:38
本文主要是介绍【jmespath】—2. 进阶 List and Slice Projections,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Projections翻译的话说实话我也不知道翻成什么比较准确,姑且就叫“投影”吧,不过带来的功能确实非常的强大、好用。
首先,我先说下我的理解:
- 通配符
*
- 通配符生成的是一个list列表
- 通配符后面查找的元素都会放到这个list里
一、List and Slice Projections
列表和切片在projections中的应用。
1. 常见的接口数据返回
相信很多接口里返回的数据,在一个列表中嵌套了字典,而且每一个元素都是一个json对象,里面的key-value
都是一样的,那如果你想拿到某一个key下的所有value要如何做呢?
import jmespath dic_1 = { "people": [ {"first": "James", "last": "d"}, {"first": "Jacob", "last": "e"}, {"first": "Jayden", "last": "f"}, {"missing": "different"} ], "foo": {"bar": "baz"} } path = jmespath.search("people[*]", dic_1) print(path) #运行结果 D:\Daily\whatisyeild>python jmespath_demo.py [{'first': 'James', 'last': 'd'}, {'first': 'Jacob', 'last': 'e'}, {'first': 'Jayden', 'last': 'f'}, {'missing': 'different'}]
可以看到people[*]
中的通配符 *
匹配了列表中的所有元素,并且以列表的形式返回。
那么这时候取key是first
的值,只需要people[*].first
。
import jmespath dic_1 = { "people": [ {"first": "James", "last": "d"}, {"first": "Jacob", "last": "e"}, {"first": "Jayden", "last": "f"}, {"missing": "different"} ], "foo": {"bar": "baz"} } path = jmespath.search("people[*].first", dic_1) print(path) #运行结果 D:\Daily\whatisyeild>python jmespath_demo.py ['James', 'Jacob', 'Jayden']
可以看到,查找到的元素同样被放到了通配符创建的列表里,并返回。
同样,你也可以切片:
import jmespath dic_1 = { "people": [ {"first": "James", "last": "d"}, {"first": "Jacob", "last": "e"}, {"first": "Jayden", "last": "f"}, {"missing": "different"} ], "foo": {"bar": "baz"} } path = jmespath.search("people[:2].first", dic_1) print(path) #运行结果 D:\Daily\whatisyeild>python jmespath_demo.py ['James', 'Jacob']
2. 更复杂点的数据返回
比如,在字典的值里再嵌套列表,依然可以被投影到通配符创建的列表里。
import jmespath dic_1 = { "people": [ {"first": "James", "last": "d"}, {"first": "Jacob", "last": "e"}, {"first": "Jayden", "last": "f"}, {"first": [["a","b","c"],2,3,4,5], "last": "g"}, {"missing": "different"} ], "foo": {"bar": "baz"} } path = jmespath.search("people[*].first[0]", dic_1) print(path) #运行结果 D:\Daily\whatisyeild>python jmespath_demo.py [['a', 'b', 'c']]
3. 无效情况
需要注意的是,当通配符右边查找的元素是null的时候,投影到结果列表里这个元素是会被忽略的。
比如,people[*].first[0][10]
下标越界了,所以最后输出的结果就是个空列表[]
。
import jmespath dic_1 = { "people": [ {"first": "James", "last": "d"}, {"first": "Jacob", "last": "e"}, {"first": "Jayden", "last": "f"}, {"first": [["a","b","c"],2,3,4,5], "last": "g"}, {"missing": "different"} ], "foo": {"bar": "baz"} } path = jmespath.search("people[*].first[0][10]", dic_1) print(path) #运行结果: D:\Daily\whatisyeild>python jmespath_demo.py []
另外,列表投影仅对list列表有效。如果值不是列表,则表达式的结果为null。
比如,用列表投影取foo[*]
就不行了,因为 "foo": {"bar": "baz"}
对应的是一个json对象,所以会得到一个null
。
import jmespath dic_1 = { "people": [ {"first": "James", "last": "d"}, {"first": "Jacob", "last": "e"}, {"first": "Jayden", "last": "f"}, {"first": [["a","b","c"],2,3,4,5], "last": "g"}, {"missing": "different"} ], "foo": {"bar": "baz"} } path = jmespath.search("foo[*]", dic_1) print(path) #运行结果 D:\Daily\whatisyeild>python jmespath_demo.py None
这篇关于【jmespath】—2. 进阶 List and Slice Projections的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享