Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ansible中查询json对象_Ansible - Fatal编程技术网

如何在ansible中查询json对象

如何在ansible中查询json对象,ansible,Ansible,当我查询json对象时,我需要将其限制为顶级对象。请原谅我的无知,因为我是新手 我已经阅读了几篇文章,回顾了JMESPath教程和示例,我觉得我已经接近了,但还没有放弃 我想指出一点,我只看到: 虚拟机1 虚拟机2 Here is a sample of "clusters" ok: [localhost] => { "msg": { “mydatacenter”: { “mycluster”: { “myesxhost”: {

当我查询json对象时,我需要将其限制为顶级对象。请原谅我的无知,因为我是新手

我已经阅读了几篇文章,回顾了JMESPath教程和示例,我觉得我已经接近了,但还没有放弃

我想指出一点,我只看到: 虚拟机1 虚拟机2

Here is a sample of "clusters"
ok: [localhost] => {
"msg": {
    “mydatacenter”: {
        “mycluster”: {
            “myesxhost”: {
                "virtualmachine1”: {
                    "annotation": "", 
                    "cpu": "2", 
                    "diskGB": "38.00", 
                    "folder": “folder1”, 
                    "mem": "4", 
                    "net": {}, 
                    "ostype": "Red Hat Enterprise Linux 6 (64-bit)", 
                    "path": “[datastore1] virtualmachines1/virtualmachine1.vmtx", 
                    "state": "poweredOff

仅根据您提供的输出,结果如下:

- debug:
    msg: >-
     {{ clusters | json_query("mydatacenter.*.*") | first | first |
        dict2items | map(attribute="key") | list }}
因为JMESPath中的每个.*似乎都会生成匹配子项的列表,所以我们需要将它们取消列出,这是前两个过滤器所做的。然后,您有{virtualmachine1:{},virtualmachine2:{}}结构,但您不关心它的值,只关心键,因此dict2items将该结构转换为:

[{"key": "virtualmachine1", "value": {etcetc}},
 {"key": "virtualmachine2", "value": {whatever}}]

然后我们提取key字段的值,瞧,最底层结构的key列表

Hi nnedofhelp,欢迎使用SO。您没有提供集群价值的示例,因此很难为您提供帮助。话虽如此,您很可能想探索json|U查询…什么…|dict2items | mapatribute=key | list由于您要查找的内容是dict中的键,而不是一个可以用json|u querytanks Matthew轻松确定的值,因此我更新了帖子,希望我做得正确。如果您需要更多信息,请告诉我。我将开始研究听写2项。哦,天哪,我想我做错了什么。我得到以下消息:致命:[localhost]:失败!=>{msg:dict2items需要一个字典,而不是get。}我使用的语法是:msg:{{clusters | json | u query'mydatacenter....*'| first | first | dict2items | mapatribute='key'| list}这显然是因为| first |首先生成了一个未定义的;尝试只发送json_查询的输出…|首先是msg:,这样您就可以看到结构是什么样子了。因为您有整个文档,而我只有一个片段,所以管道完全可能需要更复杂,或者只需切换到{%for…%}循环并手动迭代好消息!我能够得到我预期的结果。非常感谢你的帮助和耐心。我使用了以下语法:{clusters | json|u query'mydatacenter.mycluster.*'first | dict2items | mapatribute='key'| list}}如果您知道我可以用来学习json|u查询的任何好的参考资料,我将不胜感激。看起来我会越来越多地使用它。
[{"key": "virtualmachine1", "value": {etcetc}},
 {"key": "virtualmachine2", "value": {whatever}}]