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
过滤器。