ansible json-按内容查询 select 项的路径
ansible json-query path to select item by content
有谁知道下面示例 JSON 中的 select Tigger's food 可以使用什么 json-query 过滤器? JSON 是庞大且相对复杂的 AWS blob 的简化替代品。
一些背景:我很高兴地发现 Ansible 有一个 json-query 过滤器。考虑到我正在尝试 select 来自 AWS JSON blob 的元素,这看起来好像正是我所需要的。但是,我很快 运行 遇到了麻烦,因为 AWS 对象有标签,我需要按标签 select 项目。
我尝试了 select 或等同于 Foods[Tags[(Key='For') & (Value='Tigger')]]
和类似的路径,但未能成功。使用独立的 json-query 库,例如 https://www.npmjs.com/package/json-query 我可以使用 parent
属性,但它似乎不在 Ansible 中,除了偏离 json-查询.
回避问题并使用 json路径 selector 可能会更好。 jsonpath 类似于 json-query 并且是来自 xpath 的 t运行slation。
{ "Foods" :
[ { "Id": 456
, "Tags":
[ {"Key":"For", "Value":"Heffalump"}
, {"Key":"Purpose", "Value":"Food"}
]
}
, { "Id": 678
, "Tags":
[ {"Key":"For", "Value":"Tigger"}
, {"Key":"Purpose", "Value":"Food"}
]
}
, { "Id": 911
, "Tags":
[ {"Key":"For", "Value":"Roo"}
, {"Key":"Purpose", "Value":"Food"}
]
}
]
}
参考资料
- json_query 在 ansible 中:
http://docs.ansible.com/ansible/playbooks_filters.html#json-query-filter
- json-查询独立节点:https://www.npmjs.com/package/json-query
- jmespath,库ansible使用:http://jmespath.org/
- json-独立查询python:https://pypi.python.org/pypi/jsonquery/(红鲱鱼)
您需要 ID 列表吗?如果是这样,请尝试:
- debug: msg="{{ lookup('file','test.json') | from_json | json_query(query) }}"
vars:
query: "Foods[].{id: Id, for: (Tags[?Key=='For'].Value)[0]} | [?for=='Tigger'].id"
首先构造具有必要字段的简单对象,然后将其通过管道传递给过滤器。
有谁知道下面示例 JSON 中的 select Tigger's food 可以使用什么 json-query 过滤器? JSON 是庞大且相对复杂的 AWS blob 的简化替代品。
一些背景:我很高兴地发现 Ansible 有一个 json-query 过滤器。考虑到我正在尝试 select 来自 AWS JSON blob 的元素,这看起来好像正是我所需要的。但是,我很快 运行 遇到了麻烦,因为 AWS 对象有标签,我需要按标签 select 项目。
我尝试了 select 或等同于 Foods[Tags[(Key='For') & (Value='Tigger')]]
和类似的路径,但未能成功。使用独立的 json-query 库,例如 https://www.npmjs.com/package/json-query 我可以使用 parent
属性,但它似乎不在 Ansible 中,除了偏离 json-查询.
回避问题并使用 json路径 selector 可能会更好。 jsonpath 类似于 json-query 并且是来自 xpath 的 t运行slation。
{ "Foods" :
[ { "Id": 456
, "Tags":
[ {"Key":"For", "Value":"Heffalump"}
, {"Key":"Purpose", "Value":"Food"}
]
}
, { "Id": 678
, "Tags":
[ {"Key":"For", "Value":"Tigger"}
, {"Key":"Purpose", "Value":"Food"}
]
}
, { "Id": 911
, "Tags":
[ {"Key":"For", "Value":"Roo"}
, {"Key":"Purpose", "Value":"Food"}
]
}
]
}
参考资料
- json_query 在 ansible 中: http://docs.ansible.com/ansible/playbooks_filters.html#json-query-filter
- json-查询独立节点:https://www.npmjs.com/package/json-query
- jmespath,库ansible使用:http://jmespath.org/
- json-独立查询python:https://pypi.python.org/pypi/jsonquery/(红鲱鱼)
您需要 ID 列表吗?如果是这样,请尝试:
- debug: msg="{{ lookup('file','test.json') | from_json | json_query(query) }}"
vars:
query: "Foods[].{id: Id, for: (Tags[?Key=='For'].Value)[0]} | [?for=='Tigger'].id"
首先构造具有必要字段的简单对象,然后将其通过管道传递给过滤器。