Absolutely thank you for the breakdowns and information, I know I'll be
referencing this in the VERY near future :)

On Sat, Nov 7, 2020, 6:37 AM Stefan Hornburg (Racke) <[email protected]>
wrote:

> On 11/7/20 12:33 AM, Vladimir Botka wrote:
> > On Fri, 6 Nov 2020 10:59:29 -0800 (PST)
> > flowerysong <[email protected]> wrote:
> >
> >> json_query() is almost never needed, ...
> >
> > FWIW, Let me add to this statement:
> >
> >    "json_query() is almost never needed when the data is stored in
> >    lists. json_query() is essential when the data is stored in nested
> >    dictionaries."
> >
> > Sometimes the result of using the nested dictionaries is a cleaner
> > code. Then json_query() is essential to help with searching. In other
> > words, without json_query() it might be a trade-off between a clean
> > code and optimal structure. See the examples below.
> > ------------------------------------------------------------------
> >
> > 1) Trivial. The task below gives "msg: [A, D, G]"
> >
> >     - debug:
> >         msg: "{{ data|map(attribute='a1')|list|
> >                  to_yaml }}"
> >       vars:
> >         data:
> >           - {a1: A, a2: B, a3: C}
> >           - {a1: D, a2: E, a3: F}
> >           - {a1: G, a2: H, a3: I}
> >
> > 2) Feasible. First level nested dictionaries can be solved by
> >    dict2items. The task below gives the same result "msg: [A, D, G]"
> >
> >     - debug:
> >         msg: "{{ data|dict2items|
> >                  map(attribute='value')|
> >                  map(attribute='a1')|list|
> >                  to_yaml }}"
> >       vars:
> >         data:
> >           dic1: {a1: A, a2: B, a3: C}
> >           dic2: {a1: D, a2: E, a3: F}
> >           dic3: {a1: G, a2: H, a3: I}
> >
> > 3) Problem. The task is more complicated when the data is stored in
> >    nested dictionaries. For example the task below
> >
> >     - debug:
> >         msg: "{{ data|dict2items|
> >                  map(attribute='value')|list|
> >                  to_yaml }}"
> >       vars:
> >         data:
> >           section1:
> >             dic1: {a1: A, a2: B, a3: C}
> >             dic2: {a1: D, a2: E, a3: F}
> >           section2:
> >             dic3: {a1: G, a2: H, a3: I}
> >
> >   gives the list of dictionaries. It's both tricky and error-prone to
> >   proceed in the pipe.
> >
> >     msg:
> >       - dic1: {a1: A, a2: B, a3: C}
> >         dic2: {a1: D, a2: E, a3: F}
> >       - dic3: {a1: G, a2: H, a3: I}
> >
> > 4) Solution. Using json_query() to process the same data is trivial.
> >    The task below gives the same result "msg: [A, D, G]"
> >
> >     - debug:
> >         msg: "{{ data|json_query('*.*.a1')|flatten|
> >                  to_yaml }}"
> >       vars:
> >         data:
> >           section1:
> >             dic1: {a1: A, a2: B, a3: C}
> >             dic2: {a1: D, a2: E, a3: F}
> >           section2:
> >             dic3: {a1: G, a2: H, a3: I}
> >
> > 5) Dilemma. json_query() is not needed if the same data is stored in
> >    the lists. The task below gives the same result "msg: [A, D, G]".
> >    Is this structure optimal for the case? Isn't nested dictionaries
> >    a better structure? If yes, put the data into the nested
> >    dictionaries and use json_query().
> >
> >     - debug:
> >         msg: "{{ data|
> >                  map(attribute='list')|flatten|
> >                  map(attribute='a1')|list|
> >                  to_yaml }}"
> >       vars:
> >         data:
> >           - section: section1
> >             list:
> >               - {a1: A, a2: B, a3: C}
> >               - {a1: D, a2: E, a3: F}
> >           - section: section2
> >             list:
> >               - {a1: G, a2: H, a3: I}
> >
>
> Hello Vladimir,
>
> thanks a lot for your exhaustive analysis of json_query vs. Jinja filters.
>
> Very much appreciated!!
>
> Regards
>         Racke
>
> --
> Ecommerce and Linux consulting + Perl and web application programming.
> Debian and Sympa administration. Provisioning with Ansible.
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "Ansible Project" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/ansible-project/nccjo_TJX3Q/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/a79413f0-03cb-b390-08d4-7056e82e2ea4%40linuxia.de
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAEVqsuJo2whYnSd5JaWvdoX-ev%2B9iE9ppVgoXEexwqYXMDWHZA%40mail.gmail.com.

Reply via email to