使用Twig生成JSON

我想要一个返回简单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把正确的空白放到位呢? 我查看了手册,它似乎只关心不插入空格。

这对我有用(树枝模板):

 var parsedJSON = JSON.parse('{{ ['one', 'two', 'three']|json_encode|e('js') }}'); 

然后:

 console.log(parsedJSON); 

将输出:

  Array ["one", "two", "three"] 

在FF控制台。

Twig有一个filter。

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文档。

不要使用Twig来生成json响应。

在您的控制器中,使用:

 return new Response(json_encode($var)); 

样品:

 public function sampleAction() { $urls = array('../test', '../something', '../sample'); return new Response(json_encode($var)); } 

如果URL是从Symfony2路由生成的,您可以使用:

 public function sampleAction() { $urls = array( $this->generateUrl('my_test'), $this->generateUrl('my_something'), $this->generateUrl('my_sample'), ); return new Response(json_encode($var)); } 

如果你延长枝条,这很容易。

首先,创建一个包含扩展名的类:

 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); } } 

基本上$ .getJson()方法需要json但是是一个字符串,所以你可以使用$ .get()来获取响应并使用解析器将字符串解析为JSON

  $.get("ffff",function(data){ // user parser JSON.parse(); });