在 Twig 模板中创建 JSON 输出时出现问题
Problem creating JSON outuput in Twig Template
我正在学习使用 Craft CMS,它使用 Twig 模板。我试图在 Twig 中输出一个 JSON 对象,但我得到的不是 JSON 中的 2 个项目,而是一个项目的信息。
这是我的代码:
{% set newsitems = craft.entries.section('newsitems').orderBy('PostDate desc').limit(100) %}
{% set response = [] %}
{% for newsitem in newsitems %}
{{ 'Here' }}
{% set response = response|merge({'type':0, 'id':newsitem.id, 'link':newsitem.sourceLink}) %}
{% endfor %}
{{ response|json_encode() }}
这是我得到的输出:
Here Here {"type":0,"id":"25","link":"https:\/\/gadgets.ndtv.com"}
可以看出,循环执行了两次('Here'被打印了两次)但是JSON数组中只有一项被打印了。
我是不是漏掉了一些基本的东西?任何帮助,将不胜感激。提前致谢。
Twig 的 merge
过滤器在后台使用 array_merge。
手册说明如下
If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended.
这就是您的输出发生的情况,在第一次迭代中您创建了一个关联数组,其键为:type
、id
、link
。在第 x 次迭代中,您只是覆盖存储在所述键中的值。解决方法在手册中也有说明,数字索引将附加到数组而不是覆盖它。
在twig
中你可以这样解决:
{% set response = [] %}
{% for newsitem in newsitems %}
{% set response = response|merge([{ 'type': 0, 'id': newsitem.id, 'source': newsitem.source,},]) %}
{% endfor %}
{{ response|json_encode|raw }}
我正在学习使用 Craft CMS,它使用 Twig 模板。我试图在 Twig 中输出一个 JSON 对象,但我得到的不是 JSON 中的 2 个项目,而是一个项目的信息。
这是我的代码:
{% set newsitems = craft.entries.section('newsitems').orderBy('PostDate desc').limit(100) %}
{% set response = [] %}
{% for newsitem in newsitems %}
{{ 'Here' }}
{% set response = response|merge({'type':0, 'id':newsitem.id, 'link':newsitem.sourceLink}) %}
{% endfor %}
{{ response|json_encode() }}
这是我得到的输出:
Here Here {"type":0,"id":"25","link":"https:\/\/gadgets.ndtv.com"}
可以看出,循环执行了两次('Here'被打印了两次)但是JSON数组中只有一项被打印了。
我是不是漏掉了一些基本的东西?任何帮助,将不胜感激。提前致谢。
Twig 的 merge
过滤器在后台使用 array_merge。
手册说明如下
If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended.
这就是您的输出发生的情况,在第一次迭代中您创建了一个关联数组,其键为:type
、id
、link
。在第 x 次迭代中,您只是覆盖存储在所述键中的值。解决方法在手册中也有说明,数字索引将附加到数组而不是覆盖它。
在twig
中你可以这样解决:
{% set response = [] %}
{% for newsitem in newsitems %}
{% set response = response|merge([{ 'type': 0, 'id': newsitem.id, 'source': newsitem.source,},]) %}
{% endfor %}
{{ response|json_encode|raw }}