'Ansible sctask parsing

I am fetching Service Now sctask#. I am able to call the API and got the required sctasks and descriptions, but struggling to parse it out since bad in string management.

output

msg": {
        "result": [
            {
                "active": "true",
                "activity_due": "",
                "additional_assignee_list": "",
                "approval": "not requested",
                "approval_history": "",
                "approval_set": "",
                "assigned_to": {
                    "link": "url",
                    "value": "value"
                },
"assignment_group": {
                    "link": "group name",
                    "value": "value"
                },
                "number": "SCTASK0000007",

Code

- name: GET SCTASKS
  ignore_errors: yes
  uri:
    url: https://abc.service-now.com/api/now/table/sc_task?sysparm_query=assignment_group.name=mygroup^active=1
    user: username
    password: password
    method: GET
    body_format: json
  register: output

- set_fact:
    tasknum: "{{ output.json | json_query(query) }}"
  vars:
    query: "[].[result].[number].value"
      
- name: Print all Task numbers
  debug: 
    msg: "{{ item}}"
  with_items: 
    - "{{ tasknum }}" 

Any help, appreciated. Thanks!!



Solution 1:[1]

You create a list of attribute's number values. There is only one item in the list result

result:
  - active: 'true'
    activity_due: ''
    additional_assignee_list: ''
    approval: not requested
    approval_history: ''
    approval_set: ''
    assigned_to:
      link: url
      value: value
    assignment_group:
      link: group name
      value: value
    number: SCTASK0000007

Therefore, the task below

    - debug:
        msg: "{{ result|json_query(_query) }}"
      vars:
        _query: "[].{scnumber: number}"

gives a list with one item too

msg:
  - scnumber: SCTASK0000007

There is only one attribute selected from the dictionary. It would be simpler to create a list of the values only

    - set_fact:
        scnumbers: "{{ result|json_query(_query) }}"
      vars:
        _query: "[].number"

gives

scnumbers:
  - SCTASK0000007

Then, the map attribute would also create the list

    - set_fact:
        scnumbers: "{{ result|map(attribute='number')|list }}"

Solution 2:[2]

Issue is resolved with the following code.

- name: print tasknum
  debug: msg="{{ jsoncontent.json | json_query(query) }}"
  vars:
    query: "result[*].{scnumber: number}"

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Vladimir Botka
Solution 2 user312307