jmespath. Изменить один элемент в массиве в зависимости от типа - PullRequest
0 голосов
/ 19 февраля 2020

Я использую Ansible фильтр json_query

данные:

[
  "just_dir",
  {
     "path": "extend_dir",
     "order": "nginx"
  }
]

Я хочу получить:

[
  {
     "path": "just_dir",
  },
  {
     "path": "extend_dir",
     "order": "nginx"
  }
]
merage([?type(@) == `string`].{path: @}, [?type(@) == `object`])

не работает.

1 Ответ

0 голосов
/ 19 февраля 2020

К сожалению, похоже, что невозможно объединить 2 массива

Проблема Github: jmespath.py # 152

Также необходимо добавить from_json Фильтр, прежде чем применить его к json_query

---
- hosts: localhost
  gather_facts: no
  vars:
    data: '[
      "just_dir",
      {
         "path": "extend_dir",
         "order": "nginx"
      }
    ]'
  tasks:
   - name: debug just_dir
     debug: msg="{{ data | from_json  | json_query(jmesquery) }}"
     vars:
       jmesquery: "[?type(@) == `string`].{path: @}"

   - name: debug Other data
     debug: msg="{{ data | from_json  | json_query(jmesquery) }}"
     vars:
       jmesquery: "[?type(@) == `object`]"
...