使用JSON.stringify显示Twig变量



Silex应用程序中有一个函数,它执行cURL语句并返回分配给变量curl_result的JSON字符串。然后将此变量传递到Twig模板中,如下所示:

return $twig->render('http.html.twig', ['curl_result' => $result]);

在Twig模板中,我可以使用以下内容显示JSON字符串变量:

{% if curl_result is defined %}
<pre>{{ curl_result }}</pre>
{% endif %}

产生这样的结果:

{"ServiceAccount":[{"Type":"MATTER","ID":[{"body":"1980933400...

或者,当我使用JSON_PRETTY_PRINT:时

{% if curl_result is defined %}
<pre>{{ curl_result|json_encode(constant('JSON_PRETTY_PRINT')) }}</pre>
{% endif %}

唯一的效果似乎是将JSON字符串放在双引号内,并转义双引号内的内容:

"{"ServiceAccount":[{"Type":"MATTER","ID":[{"body":"1980933400...

这两种方法都不以可用的方式显示JSON。我希望JSON以人类可读的格式显示,并希望为此使用JSON.stringify。我可以使用以下javascript代码和JSON.stringify这样的随机文本:

<script>
var jsonString = '{"some":"json"}';
var jsonPretty = JSON.stringify(JSON.parse(jsonString),null,2);
output(jsonPretty);
</script>

如果你仍然支持我,我的问题是:如何将Twig变量curl_result引入javascript,以便我可以JSON.stringify

在您的控制器中,$result是一个字符串,它包含一个JSON字符串,但目前它只是一个字符串。因此,当您将它传递给json_encode时,它会转义所有双引号,因为它想要对一个简单的字符串进行编码。

如果你想使用json_encode来漂亮地打印这个数据,你首先需要解码这个字符串(就像你在JSON.parse的替代解决方案中所做的那样(,然后用漂亮的打印选项对它进行编码。所以在你的控制器中,你应该有这样的改变:

return $twig->render('http.html.twig', ['curl_result' => json_decode($result)]);

然后,您可以使用json_encode在您的小树枝文件中漂亮地打印curl_result,就像您在第二个小树枝片段中尝试的那样:

{% if curl_result is defined %}
<pre>{{ curl_result|json_encode(constant('JSON_PRETTY_PRINT')) }}</pre>
{% endif %}

或者,您可以将$result作为JS变量打印在您的小树枝模板文件中,如下所示:

<script>
var jsonString = '{{ curl_result | raw }}';
var jsonPretty = JSON.stringify(JSON.parse(jsonString),null,2);
console.log(jsonPretty);
</script>

请注意打印json字符串时使用raw过滤器。

最新更新