【问题标题】:jinja2 json template omiting <key : "value"> pairjinja2 json 模板省略 <key : "value"> 对
【发布时间】:2019-07-01 12:29:28
【问题描述】:

我正在使用 jinja2 模板在 json 中呈现数据

我有 python 数据作为

name = ['Mark', 'Smits', 'Roger']
age = [23, 45, 32]
gender = ['male','male']

我想使用以下模板将其写入 json 文件

{
  "resourceType" : "MyData",
  "name" : "{{human_name}}",
  "age" : "{{age}}",
  "gender":"{{gender}}"
}

我想要的是条目 [Roger,32,(null)]

我的输出 json 文件应该如下所示:

{
  "resourceType" : "MyData",
  "name" : "Roger",
  "age" : "32",
}

现在看起来像

{
  "resourceType" : "MyData",
  "name" : "Roger",
  "age" : "32",
  "gender":"",
}

我尝试在 jinja 中使用过滤器,但没有真正起作用。

【问题讨论】:

  • 类似:print(json.dumps([dict(name=pn) for pn in name]))

标签: python jinja2


【解决方案1】:

问题是在生成字典后清理空键。我设法通过使用循环来做到这一点,但可能有更好的方法来做到这一点。

name = ['Mark', 'Smits', 'Roger']
age = [23, 45, 32]
gender = ['male','male']

item_count_max = max(len(name), len(age), len(gender))

name = name + [None, ] * (item_count_max - len(name))
age = age + [None, ] * (item_count_max - len(age))
gender = gender + [None, ] * (item_count_max - len(gender))

import json
for n, a, g in zip(name, age, gender):
    data = {
        'resourceType': 'MyData',
        'name': n,
        'age': a,
        'gender': g
    }
    items = data.items()
    for k, v in items:  # We remove empty keys here
        if not v:
            data.pop(k)
    print(json.dumps(data, indent=4))

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 2016-06-09
    • 2014-09-01
    • 2020-11-21
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多