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
相关产品推荐
相关产品推荐

