首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能从更改键中获取值

不能从更改键中获取值
EN

Stack Overflow用户
提问于 2021-10-22 22:40:56
回答 1查看 43关注 0票数 0

我想从json那里得到价值,但关键之一是不同的。

下面是json的例子

代码语言:javascript
复制
{
"json": {

    "id": "9758b1e5-442e-4545-9364-45f28477edfb",
    "results": [{
        "code": 200,
        "host": "localhost",
        "message": "no change",
        "runTime": 1233,
        "tenant": "http-validate-2.usa-dc.com"
    }],
    "traces": {
        "http-validate-2.usa-dc.comCurrent": {
            "/Common/10.10.100.10": {
                "command": "ltm node"

            },


            "http-validate-2.usa-dc.comDiff": [{
                "command": "ltm virtual",
                "kind": "D",
                "lhs": {
                    "default": "yes"
                },
                "lhsCommand": "ltm virtual",
                "path": [
                    "/http-validate-2.usa-dc.com/app/vs_http-validate-2.usa-dc.com_80",
                    "properties",
                    "persist",
                    "/Common/cookie"
                ],
                "rhsCommand": "ltm virtual",
                "tags": [
                    "tmsh"
                ]
            }]
        }
    }
}

}

我的游戏手册

代码语言:javascript
复制
tasks:
 

 - name : deploy json file AS3  to F5
   debug:
      msg: "{{ lookup('file', 'parse.json') }}"
   register: atc_AS3_status

    
 - name: debug
   debug:
     msg: "{{ atc_AS3_status.msg.json['traces']['.*Diff']}}"

我想要到达键"path“,但是上面的键”http-验证-2. can dc.comDiff“可能与”http-有效性-3.can-dc.comDiff“不同,但始终以Diff结尾。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-22 23:08:55

使用json_query,例如。

代码语言:javascript
复制
    - debug:
        msg: "{{ json.traces|json_query('*.*[][].path') }}"

应该给出路径的列表(可能有更多的路径)

代码语言:javascript
复制
  msg:
  - - /http-validate-2.usa-dc.com/app/vs_http-validate-2.usa-dc.com_80
    - properties
    - persist
    - /Common/cookie

问:"I只需要以Diff."结尾的路径

答:JMESPath无法搜索关键通配符AFAIK。相反,使用select并创建与regex匹配的嵌套键列表。

代码语言:javascript
复制
    - debug:
        msg: "{{ json.traces|json_query('*.keys(@)')|flatten|
                 select('match', '^.*Diff$')|list }}"

给出

代码语言:javascript
复制
  msg:
  - http-validate-2.usa-dc.comDiff

然后迭代这个列表,选择路径并连接列表路径。

代码语言:javascript
复制
    - set_fact:
        paths: "{{ paths|d([]) + json.traces|json_query(query) }}"
      loop: "{{ json.traces|json_query('*.keys(@)')|flatten|
                select('match', '^.*Diff$')|list }}"
      vars:
        query: '*."{{ item }}"[].path'

给出匹配正则表达式的键的路径列表。

代码语言:javascript
复制
  paths:
  - - /http-validate-2.usa-dc.com/app/vs_http-validate-2.usa-dc.com_80
    - properties
    - persist
    - /Common/cookie
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69683743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档