首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jinja2中列出JSON对象和键

在Jinja2中列出JSON对象和键
EN

Stack Overflow用户
提问于 2022-02-14 15:06:25
回答 1查看 392关注 0票数 1

我有这样一个json文件:

代码语言:javascript
复制
[
    {
    "as": 65011,
    "peers": {
      "swp1": {
        "hostname": "Spine-01",
        "remoteAs": 65001
      },
      "swp2": {
        "hostname": "Spine-02",
        "remoteAs": 65001
      }
    },
    "routerId": "10.0.0.3",
    "peerCount": 2
    }
]

使用Jinja2,我希望以txt格式转换它,如下所示:

代码语言:javascript
复制
Peers :
   Interface : swp1
   Hostname : Spine-1
   AS : 65001
   Interface : swp2
   Hostname : Spine-2
   AS : 65001

我使用jsonpath来验证它。我使用的模板如下:

代码语言:javascript
复制
{% for item in get_devices.json.results -%}
Peers :
   Interface : {{ item.peers.*~ }}
   Hostname : {{ item.peers.[*].hostname }}
   AS : {{ item.peers.[*].remoteAs }}
{% endfor %}

但是,由于*[]~字符,这会导致错误。我应该做哪些改变来正确地运行它并产生适当的输出?

EN

回答 1

Stack Overflow用户

发布于 2022-02-14 22:21:26

无论如何,Jinja2与JSONPath无关,因此您不能在这里使用它的语法。

不过,您想要达到的目标是很容易实现的,有第二个for循环到iterate over the peers dictionary

代码语言:javascript
复制
{% for item in get_devices.json.results -%}
Peers :
{%- for interface, peer in item.peers.items() %}
   Interface : {{ interface }}
   Hostname : {{ peer.hostname }}
   AS : {{ peer.remoteAs }}
{%- endfor %}
{% endfor %}

生产:

代码语言:javascript
复制
Peers :
   Interface : swp1
   Hostname : Spine-01
   AS : 65001
   Interface : swp2
   Hostname : Spine-02
   AS : 65001
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71113959

复制
相关文章

相似问题

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