这里要怎么翻呢?扁平投影?

一、Flatten Projections

1. 核心1

这个可以暂时忽略,一个重要的核心是:对于列表/对象投影,在投影中创建投影时,原始文档的结构将保留。

说人话就是,比如下面的例子。

可以看到,reservations列表中嵌套了字典,而instances的value,又是一个列表

这时候,用reservations[*].instances[*].state,那么得到的值又是什么样子的呢?

原来是列表中的元素会被拆散,重新装到结果列表里吗?

import jmespath

dic_1 = {
"reservations": [
{
"instances": [
{"state": "running"},
{"state": "stopped"}
]
},
{
"instances": [
{"state": "terminated"},
{"state": "running"}
]
}
]
}
path = jmespath.search("reservations[*].instances[*].state", dic_1)
print(path)

运行一下,可以看到结果列表中,原来是列表的还是列表:

D:\Daily\whatisyeild>python jmespath_demo.py
[['running', 'stopped'], ['terminated', 'running']]

我们可以再回过来看reservations[*].instances[*],其实最外层的[] 就是 reservations[*]创建的.

而内部的每一个实例instances[*],也会各自再创建出投影列表,所以结果中最外层的[]里包含了2个子元素[]

2. 核心2

那如果我就是要['running', 'stopped', 'terminated', 'running'] 这个列表要怎么办?

这就是Flatten Projections的另一个核心了,根据上面核心1里说的,如果只要保留最外侧的[]

那么内层的实例就不需要再初始化创建[]了,那么就去掉*试一下。

dic_1 = {
"reservations": [
{
"instances": [
{"state": "running"},
{"state": "stopped"}
]
},
{
"instances": [
{"state": "terminated"},
{"state": "running"}
]
}
]
}
path = jmespath.search("reservations[*].instances[].state", dic_1)
print(path) #运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
['running', 'stopped', 'terminated', 'running']

结果是['running', 'stopped', 'terminated', 'running'] ,搞定。

总结一下它的2个特点:

  • 它将子列表展平到父列表中(不是递归的,只是一个级别)。
  • 它将创建一个投影,右边的任何内容都将投影到新创建的列表上。

可以试一下,比如下面例子里有个嵌套列表,先来用[*]看一下,原始的列表结构:

import jmespath

dic_1 = [
[0, 1],
2,
[3],
4,
[5, [6, 7]]
]
path = jmespath.search("[*]", dic_1)
print(path) #运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
[[0, 1], 2, [3], 4, [5, [6, 7]]]

结果是[[0, 1], 2, [3], 4, [5, [6, 7]]] ,这时候用[]展开列表试一下:

import jmespath

dic_1 = [
[0, 1],
2,
[3],
4,
[5, [6, 7]]
]
path = jmespath.search("[]", dic_1)
print(path) #运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
[0, 1, 2, 3, 4, 5, [6, 7]]

可以看到,列表成功展开,[0, 1, 2, 3, 4, 5, [6, 7]] ,不是递归展开,只是同级,子列表[6, 7] 与列表其他元素同级。

【jmespath】—4. 进阶 Flatten Projections的更多相关文章

  1. 【jmespath】—3. 进阶 Object Projections

    继续,来看Object Projections. 一.Object Projections 上面说的是列表投影,只适用于列表.那么对于json对象,可以用对象投影. 投影最终返回的仍然是个列表,只不过 ...

  2. Python格式化处理json数据的方式

    1.问题 在遇到json数据的过程中,我们经常需要获取json数据中某个值的操作,如果是用get方法去取比较繁琐,接下来介绍两种方式来取值. 2.jsonpath来格式化处理json数据 2.1介绍 ...

  3. 【jmespath】—2. 进阶 List and Slice Projections

    Projections翻译的话说实话我也不知道翻成什么比较准确,姑且就叫"投影"吧,不过带来的功能确实非常的强大.好用. 首先,我先说下我的理解: 通配符 * 通配符生成的是一个l ...

  4. jmespath(2)投影Projections

    投影 投影是JMESPath的关键特性之一.它允许您将表达式应用于元素集合.有五种投影: 列表投影 切片投影 对象投影 展平投影 过滤投影 处理投影需要注意的点 投影评估分为两个步骤.左侧(LHS)创 ...

  5. Hibernate框架进阶(下篇)之查询

    导读 Hibernate进阶篇分为上中下三篇,本文为最后一篇,主要内容是Hibernate框架的查询,主要包括hql语句查询,criteria查询以及查询策略的选择. 知识框架 Hibernate查询 ...

  6. Scala进阶之路-高级数据类型之数组的使用

    Scala进阶之路-高级数据类型之数组的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的初始化方式 1>.长度不可变数组Array 注意:顾名思义,长度不可变数 ...

  7. CocoaPods学习系列4——进阶用法

    这篇文章,记录一下CocoaPods的进阶用法. 进阶用法主要体现在.podspec文件和Podfile的配置上. .podspec文件的进阶配置 以官方的一个.podspec文件示例细说: Pod: ...

  8. 100例Python代码带你从入门到进阶!

    以下所有代码全都至少运行一遍,确保可复现.易于理解.逐步完成入门到进阶的学习. 此教程经过我 反复打磨多遍 ,经常为此熬夜,真心不易,文章比较长,看完有用,帮我点个在看或分享支持. 教程包括 62 个 ...

  9. 【jmespath】—1. 基础用法

    一.jsonpath 之前我写接口自动化测试时候,对于复杂的json返回,会使用jsonpath这个第三方库,就像写xpath一样,方便的查询json元素. 因为之前写WEB自动化时候,总用xpath ...

随机推荐

  1. Python接口自动化测试框架: pytest+allure+jsonpath+requests+excel实现的接口自动化测试框架(学习成果)

    废话 最近在自己学习接口自动化测试,这里也算是完成一个小的成果,欢迎大家交流指出不合适的地方,源码在文末 问题 整体代码结构优化未实现,导致最终测试时间变长,其他工具单接口测试只需要39ms,该框架中 ...

  2. C++虚函数相关内容

    样例代码 class Base{public: Base(){}; virtual ~Base(){    //若没有设置为虚函数:如果有这样的指针Base *p=new Derived();声明,则 ...

  3. 关于Exceptionless日志收集框架如何关闭磁盘缓存

    问题:在使用Exceptionless的时候,Exception在收集到日志时会默认在appdata里面缓存当条日志的缓存文件,时间久了之后,如果收集到的日志越多磁盘的空间就会不足. 我使用的环境是 ...

  4. PR基础

    Windows->Workspace->Reset to saved layout 恢复工作区 Edit->Perferences->Auto Save 设置自动保存时间 资源 ...

  5. java 序列化流与反序列化流

    一 对象序列化流ObjectOutputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStr ...

  6. JavaScript package.json里添加git-cz

    git-cz官网 0.目的 => 替代git commit, 丰富提交的内容 1.安装包 npm install commitizen cz-conventional-changelog --s ...

  7. 一个基于 Beego 的,能快速创建个人博客,cms 的系统

    学习beego时候开发的一个博客系统,在持续完善,有不足之处,望大佬们多多体谅,并且指出.感谢! Go Blog 一个基于Beego的,能快速创建个人博客,cms 的系统 包含功能 查看 Go Blo ...

  8. Spring Cloud Config Client 超时与重试

    简介 有时客户端需要在 config server 无响应时进行重试,以给 config server 时间进行恢复.利用 spring 提供的重试组件,我们可以方便的配置重试机制,包括重试间隔,重试 ...

  9. 洛谷P1057 传球游戏 完美错觉(完美错解)

    //作者:pb2 博客:https://www.luogu.com.cn/blog/pb2/ 或 http://www.cnblogs.com/p2blog //博客新闻1:"WPS开机自启 ...

  10. Ubuntu图形桌面切换到命令行界面

    Ubuntu提供两种进入方式,一个是我们平常最熟悉的图形界面形式,还有一种是纯命令行方式. 1.按 Ctrl + Alt + (F1~F6中的任意一个)即可进入纯命令行模式. 进入后,需要输入用户名, ...