jmespath :使用 属性 过滤器获取密钥
jmespath : getting keys with property filter
我有以下 json :
{
"dataset_1": {
"size_in_mb": 0.5,
"task": "clean",
"tags": ["apple", "banana", "strawberry"]
},
"dataset_2": {
"size_in_mb": 100,
"task": "split",
"tags": ["apple"]
},
"dataset_3": {
"size_in_mb": 1024,
"task": "clean",
"tags": ["strawberry"]
}
}
我该怎么做:
- 获取具有名为 "apple" 标签的数据集
- 获取大于 500mb 的数据集
- 获取任务为"split"
的数据集
我可以查询数据集的属性,但无法提取具有特定 属性 的数据集的名称。例如,当 "tags" 包含 "strawberry".
时,我可以得到 ["strawberry"],但不能得到 ["dataset_1"、"dataset_3"]
问题很接近,但基本上说你不能使用 jmespath。
你想通了这个
正如您在评论中所述,重新规范化原始数据集以使用顺序枚举排序规则(而不是顶级排序规则的对象键)通常是最好的方法,如果您想使用 jmespath 进行通用查询。
您链接到的 Whosebug post 对此问题进行了更详细的介绍
重新规范化数据集之前和之后
- 为了那些可能想要更详细地了解您说的意思的人的利益 我最终稍微更改了架构 ... 这是 "before and after" 看起来像的例子
之前
{
"dataset_1": {
"size_in_mb": 0.5,
"task": "clean",
"tags": ["apple", "banana", "strawberry"]
},
"dataset_2": {
"size_in_mb": 100,
"task": "split",
"tags": ["apple"]
},
"dataset_3": {
"size_in_mb": 1024,
"task": "clean",
"tags": ["strawberry"]
}
}
之后
{"dataroot":[
{
"name": "dataset_1",
"size_in_mb": 0.5,
"task": "clean",
"tags": ["apple", "banana", "strawberry"]
},
{
"name": "dataset_2",
"size_in_mb": 100,
"task": "split",
"tags": ["apple", "banana", "strawberry"]
},
{
"name": "dataset_3",
"size_in_mb": 1024,
"task": "clean",
"tags": ["strawberry"]
}
]}
我有以下 json :
{
"dataset_1": {
"size_in_mb": 0.5,
"task": "clean",
"tags": ["apple", "banana", "strawberry"]
},
"dataset_2": {
"size_in_mb": 100,
"task": "split",
"tags": ["apple"]
},
"dataset_3": {
"size_in_mb": 1024,
"task": "clean",
"tags": ["strawberry"]
}
}
我该怎么做:
- 获取具有名为 "apple" 标签的数据集
- 获取大于 500mb 的数据集
- 获取任务为"split" 的数据集
我可以查询数据集的属性,但无法提取具有特定 属性 的数据集的名称。例如,当 "tags" 包含 "strawberry".
时,我可以得到 ["strawberry"],但不能得到 ["dataset_1"、"dataset_3"]你想通了这个
正如您在评论中所述,重新规范化原始数据集以使用顺序枚举排序规则(而不是顶级排序规则的对象键)通常是最好的方法,如果您想使用 jmespath 进行通用查询。
您链接到的 Whosebug post 对此问题进行了更详细的介绍
重新规范化数据集之前和之后
- 为了那些可能想要更详细地了解您说的意思的人的利益 我最终稍微更改了架构 ... 这是 "before and after" 看起来像的例子
之前
{
"dataset_1": {
"size_in_mb": 0.5,
"task": "clean",
"tags": ["apple", "banana", "strawberry"]
},
"dataset_2": {
"size_in_mb": 100,
"task": "split",
"tags": ["apple"]
},
"dataset_3": {
"size_in_mb": 1024,
"task": "clean",
"tags": ["strawberry"]
}
}
之后
{"dataroot":[
{
"name": "dataset_1",
"size_in_mb": 0.5,
"task": "clean",
"tags": ["apple", "banana", "strawberry"]
},
{
"name": "dataset_2",
"size_in_mb": 100,
"task": "split",
"tags": ["apple", "banana", "strawberry"]
},
{
"name": "dataset_3",
"size_in_mb": 1024,
"task": "clean",
"tags": ["strawberry"]
}
]}