使用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(); });