Return 列表中名字以特定值开头的对象 (jmespath)
Return objects in list that the first name starts with a certain value (jmespath)
我正在尝试过滤此对象列表,并且仅过滤 return firstName 以特定值开头的对象。
[
{"firstName":"Paul","lastName":"Collins"},
{"firstName":"Jerry","lastName":"Johnson"},
{"firstName":"Jody","lastName":"Johnson","occupation":"Occupado","company":"Companio"},
{"firstName":"Paul","lastName":"Johanson","occupation":"Developer","company":"Developer Co"}
]
我最远的是这个:
([].firstName | [?starts_with(@,'J') == `true`])
哪个 returns:
[
"Jerry",
"Jody"
]
但是,我想要 return 符合此条件的整个对象,而不仅仅是 firstName 字段。我想要的输出是:
[
{"firstName":"Jerry","lastName":"Johnson"},
{"firstName":"Jody","lastName":"Johnson","occupation":"Occupado","company":"Companio"},
]
我找不到将字符串数组传递给 starts_with
的方法。我可以从 return 中获取值并将它们插入到多个查询中,一个查询带有一堆 "|| firstName == name1 || firstName == name2"
。但是我想尝试在一个查询字符串中执行此操作。
有什么想法吗?
使用select( ... )
过滤流。通过扩展,您可以使用 map( select( ... ) )
从数组中删除项目。
map( select( .firstName | startswith("J") ) )
在 JMESPath 中,如果这就是您要查找的内容,则 filter projection 可以应用于数组的任何 属性,只需在选择数组本身的括号中指定所述属性即可。
所以,属性 不是 [].firstName
,而是放在括号内,例如[?firstName == 'Jerry']
,会给你一个叫 Jerry 的人的全部对象。
然后您可以使用 start_with()
:
来应用它
[?starts_with(firstName,'J')]
这将产生预期的结果
[
{
"firstName": "Jerry",
"lastName": "Johnson"
},
{
"firstName": "Jody",
"lastName": "Johnson",
"occupation": "Occupado",
"company": "Companio"
}
]
我正在尝试过滤此对象列表,并且仅过滤 return firstName 以特定值开头的对象。
[
{"firstName":"Paul","lastName":"Collins"},
{"firstName":"Jerry","lastName":"Johnson"},
{"firstName":"Jody","lastName":"Johnson","occupation":"Occupado","company":"Companio"},
{"firstName":"Paul","lastName":"Johanson","occupation":"Developer","company":"Developer Co"}
]
我最远的是这个:
([].firstName | [?starts_with(@,'J') == `true`])
哪个 returns:
[
"Jerry",
"Jody"
]
但是,我想要 return 符合此条件的整个对象,而不仅仅是 firstName 字段。我想要的输出是:
[
{"firstName":"Jerry","lastName":"Johnson"},
{"firstName":"Jody","lastName":"Johnson","occupation":"Occupado","company":"Companio"},
]
我找不到将字符串数组传递给 starts_with
的方法。我可以从 return 中获取值并将它们插入到多个查询中,一个查询带有一堆 "|| firstName == name1 || firstName == name2"
。但是我想尝试在一个查询字符串中执行此操作。
有什么想法吗?
使用select( ... )
过滤流。通过扩展,您可以使用 map( select( ... ) )
从数组中删除项目。
map( select( .firstName | startswith("J") ) )
在 JMESPath 中,如果这就是您要查找的内容,则 filter projection 可以应用于数组的任何 属性,只需在选择数组本身的括号中指定所述属性即可。
所以,属性 不是 [].firstName
,而是放在括号内,例如[?firstName == 'Jerry']
,会给你一个叫 Jerry 的人的全部对象。
然后您可以使用 start_with()
:
[?starts_with(firstName,'J')]
这将产生预期的结果
[
{
"firstName": "Jerry",
"lastName": "Johnson"
},
{
"firstName": "Jody",
"lastName": "Johnson",
"occupation": "Occupado",
"company": "Companio"
}
]