如何使用Jinja提取JSON字段并渲染为表格
Jinja渲染JSON为表格的实现方案
完全可以实现,核心逻辑是遍历传入的JSON字典对象的键值对逐行生成表格结构,具体操作如下:
- 前置准备:如果传入Jinja的是字符串格式的JSON,需要先在业务逻辑层将其反序列化为字典对象,再作为变量传入Jinja渲染上下文,Jinja原生不提供JSON字符串解析能力。
- 基础版模板:针对普通键值对结构的JSON,可以直接用如下模板渲染标准两列表格:
<table> <thead> <tr> <th>字段名称</th> <th>字段内容</th> </tr> </thead> <tbody> {% for field_name, field_content in json_data.items() %} <tr> <td>{{ field_name }}</td> <td>{{ field_content }}</td> </tr> {% endfor %} </tbody> </table>
- 适配逗号分隔列表值的增强版模板:如果部分字段值是逗号分隔的列表格式,可以在模板内增加判断,对这类值拆分后渲染为列表,可读性更好:
<table> <thead> <tr> <th>字段名称</th> <th>字段内容</th> </tr> </thead> <tbody> {% for field_name, field_content in json_data.items() %} <tr> <td>{{ field_name }}</td> <td> {% if ',' in field_content %} <ul> {% for single_val in field_content.split(',') %} <li>{{ single_val.strip() }}</li> {% endfor %} </ul> {% else %} {{ field_content }} {% endif %} </td> </tr> {% endfor %} </tbody> </table>
以你提供的示例JSON为例,将其作为json_data变量传入后,基础版模板渲染出的表格对应内容如下:
| 字段名称 | 字段内容 |
|---|---|
| InvestigationName | User reported message as malicious 'Rules of Conduct' for 'Phish' |
| Status | No threats found |
| ProcessedBySentinel | True |
| Alert generation status | Full alert created |
注意:如果你是在Microsoft Sentinel、Ansible、Airflow这类内置Jinja运行时的平台上使用,直接将模板填入对应配置位置即可,这类平台通常会自动将关联的JSON数据注入渲染上下文,不需要手动做反序列化处理。如果是HTML场景使用,Jinja默认开启的自动转义会自动处理特殊字符,不需要额外做转义配置。
内容的提问来源于stack exchange,提问作者CelticSpike
相关产品推荐
相关产品推荐

