You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jinja2双层嵌套循环生成JSON时缺失逗号如何解决

问题原因

原代码的逗号判断逻辑仅判断外层循环是否为最后一轮,没有处理同一外层循环下内层多个元素之间的逗号:当进入外层最后一轮(对应key为b的循环)时,所有内层元素的outer_loop.last都为True,导致这部分元素后全没有逗号,格式错误。

解决方案1:全局迭代计数器判断

先统计所有内层元素的总数量,再用计数器跟踪当前迭代位置,只要不是最后一个元素就加逗号:

// ksp = "{'a': ['someString', ['someString'], ['a1', 'a2']], 'b': ['someString', ['someString'], ['b1', 'b2', 'b3']]}"
// 先统计所有内层元素总数量
{% set total_items = ksp.values() | map(attribute='2') | map('length') | sum %}
{% set current_index = 0 %}
"users": {
    {% for kvd in ksp %}
        {% for kvt in ksp[kvd][2] %}
              "{{ kvt }}": {
                "username": "{{ ksp[kvd][1][0] }}"
         }{% if current_index != total_items - 1 %},{% endif %}
         {% set current_index = current_index + 1 %}
        {% endfor %}
    {% endfor %}
},

解决方案2:列表拼接法(推荐)

把所有要生成的键值对字符串先存入列表,最后用,直接拼接,完全不用手动判断逗号,不会出现多/少逗号的问题:

// ksp = "{'a': ['someString', ['someString'], ['a1', 'a2']], 'b': ['someString', ['someString'], ['b1', 'b2', 'b3']]}"
{% set user_items = [] %}
{% for kvd in ksp %}
    {% for kvt in ksp[kvd][2] %}
        {% set item = '"%s": {"username": "%s"}' % (kvt, ksp[kvd][1][0]) %}
        {{ user_items.append(item) or '' }}
    {% endfor %}
{% endfor %}
"users": {
    {{ user_items | join(',\n    ') }}
},

内容的提问来源于stack exchange,提问作者João Amaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:18:00