我想要一个返回简单JSON对象的URL。我正在尝试使用Twig生成JSON对象:
{
"urls": [
{% for child in page.root %}
"{{ child.url }}"{% if not loop.last %},{% endif %}
{% endfor %}
]
}
虽然回车不会留在原地,但我仍然得到一个如下所示的结果:
{'urls':['../ants/','../brick-report/','../the-pollution-intervention/','../barclay/','../broken-advertising/','../aldat-n-densom/','../thisisart/','../there-she-goes-again/']}
哪个Jquery不会用它的ajax或getJSON方法解析。它完全忽略了这个JSON。我怎么能说服Twig把正确的空白放到位呢?我查看了手册,它似乎只关心不插入空格。
答案 0 :(得分:13)
这对我有用(树枝模板):
var parsedJSON = JSON.parse('{{ ['one', 'two', 'three']|json_encode|e('js') }}');
那:
console.log(parsedJSON);
将输出:
Array ["one", "two", "three"]
在FF控制台中。
答案 1 :(得分:5)
Twig有一个过滤器。
json_encode,它使用PHP json_encode函数。
适用于您的情况:
{{ {'urls': page.root}|json_encode }}
将输出
{"urls":["..\/ants\/","..\/brick-report\/","..\/the-pollution-intervention\/","..\/barclay\/","..\/broken-advertising\/","..\/aldat-n-densom\/","..\/thisisart\/","..\/there-she-goes-again\/"]}
代码经过测试并正常运行。有关更多信息,请查看json_encode的Twig文档。
答案 2 :(得分:3)
不要使用Twig来生成json响应。
在您的控制器中,使用:
return new Response(json_encode($var));
样品:
public function sampleAction()
{
$urls = array('../test', '../something', '../sample');
return new Response(json_encode($var));
}
如果从Symfony2路由生成URL,您可以使用:
public function sampleAction()
{
$urls = array(
$this->generateUrl('my_test'),
$this->generateUrl('my_something'),
$this->generateUrl('my_sample'),
);
return new Response(json_encode($var));
}
答案 3 :(得分:0)
如果你延长枝条,这很容易。
首先,创建一个包含扩展名的类:
<?php
namespace Acme\DemoBundle\Twig\Extension;
use Symfony\Component\DependencyInjection\ContainerInterface;
use \Twig_Extension;
class VarsExtension extends Twig_Extension
{
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function getName()
{
return 'some.extension';
}
public function getFilters() {
return array(
'json_decode' => new \Twig_Filter_Method($this, 'jsonDecode'),
);
}
public function jsonDecode($str) {
return json_decode($str);
}
}
答案 4 :(得分:0)
尝试将模板包装在自动转义块中:
{% autoescape 'js' %}
{ "href": "{{ my_url }}" }
{% endautoescape%}
答案 5 :(得分:0)
通常,通过返回JsonRespnse
对象,使控制器直接返回json更有意义
但是,如果您确实需要在Twig中输出JSON并将其分配给变量,则还可以使用:
let foo = {{ bar|json_encode|raw }}
答案 6 :(得分:-1)
基本上 $。getJson()方法需要json但是\ n是一个字符串 所以你可以使用 $。get()来获取响应并使用解析器将字符串解析为JSON
$.get("ffff",function(data){
// user parser
JSON.parse();
});