问题描述
我有以下 JSON
{
"items": [
{
"configurationStatus": "SYNCED","conflictDetectionState": "IN_SYNC","connectivityState": "ONLINE",
我可以使用 items[*].isModel
访问内部的单个元素,但是,我不知道如何访问前 3 个元素。我尝试过类似 items[*].[0:2]
的方法,但没有奏效。我很好奇如何使用切片访问前 3 个元素。
解决方法
您在尝试实现此目标时可能会遇到一些问题,因为正如 JMESPath 文档中所指出的,对象是:
对象(键值对的无序集合)
来源:https://jmespath.org/specification.html,重点,我的
因此,您最终可能会根据实现获得不同的密钥,并获得真正随机的结果。
现在你的方法的问题是切片只能作用于数组。
切片表达式允许您选择数组的连续子集。
来源:https://jmespath.org/specification.html#slices,重点,我的
然后你可以做的是,为了从散列中获得一个数组是使用 values
函数,但请注意你会在这个过程中丢失键/值关联强>.
然后,假设您有一个数组,您现在可以应用切片技术。
查询:
items[].values(@)[0:3]
关于 JSON:
{
"items": [
{
"configurationStatus": "SYNCED","conflictDetectionState": "IN_SYNC","connectivityState": "ONLINE","foo": "bar","baz": "qux"
},{
"configurationStatus": "SYNCED′","conflictDetectionState": "IN_SYNC′","connectivityState": "ONLINE′","foo": "bar′","baz": "qux′"
}
]
}
这将给出:
[
[
"SYNCED","IN_SYNC","ONLINE"
],[
"SYNCED′","IN_SYNC′","ONLINE′"
]
]