如何使用来自api平台的JSON
我已经在服务器上安装了这个演示,并开发了一个客户端应用程序(使用Symfony 3.3),我希望在经典视图(Twig)中显示响应 一切正常:我可以请求并检索响应 但我陷入困境的地方是:当我在自己的观点中抛开回应时,我得到了这个如何使用来自api平台的JSON,json,twig,symfony-3.4,api-platform.com,Json,Twig,Symfony 3.4,Api Platform.com,我已经在服务器上安装了这个演示,并开发了一个客户端应用程序(使用Symfony 3.3),我希望在经典视图(Twig)中显示响应 一切正常:我可以请求并检索响应 但我陷入困境的地方是:当我在自己的观点中抛开回应时,我得到了这个 {"@context":"\/contexts\/Book","@id":"\/books","@type":"hydra:Collection","hydra:member":[{"@id":"\/books\/1","@type":"Book","id":1,"is
{"@context":"\/contexts\/Book","@id":"\/books","@type":"hydra:Collection","hydra:member":[{"@id":"\/books\/1","@type":"Book","id":1,"isbn":"9783161484100","title":"1st Book","description":"This is my first book synopsis","author":"Hemingroad","publicationDate":"2018-02-16T14:15:58+00:00","reviews":[]}],"hydra:totalItems":1}
以下是我的控制器的方法:
//...
use GuzzleHttp\Client;
public function newAction(Request $request)
{
//initialize client API
$client = new Client([
'base_uri' => 'http://my.apidomain.com/',
'timeout' => 2.0,
]);
//request to API
$dataBooks = $client->request('GET', 'books', ['auth' => ['login', 'p@$$w0rd']]);
$listBooks = $dataBooks->getBody()->getContents();
return $this->render('book/new.html.twig', array(
'listBooks' => $listBooks
));
}
我还尝试对$listBooks进行json_解码和使用。
我得到了一个漂亮的对象,但我仍然无法访问JSON属性,比如ISBN,title
{% for book in listBooks %}
{{ dump(book.title) }}
<!-- .... -->
{% endfor %}
当我试图像这样访问每个字段时,我都出错了
{{ dump(listBooks.@id) }}
{{ dump(listBooks['hydra:member']) }}
....
我错过什么了吗
谢谢$dataBooks->getBody()->getContents()代码>返回字符串,如中所述,因此需要使用
$listBooks=json\u解码($listBooks)代码>返回一个对象。在Twig中,您可以使用点表示法访问对象的方法和属性,例如{{{listBooks.myProp}}
。但由于hydra:member
包含特殊字符(:
),因此需要使用,如中所述:
另一种方法是执行$listBooks=json\u解码($listBooks,true)代码>以便获得关联数组而不是对象。然后,您可以在Twig中使用括号表示法:
{{ listBooks['hydra:member'] }}
我更喜欢第二种方法,因为在我看来<代码> {{ListBoox[Hydia:Engult:Engult]成员}[}/Cuth]比<代码> {属性(ListBooad,'Hyra:Meult')}/<代码>更清晰,更干净。易于阅读和理解。
{{dump(book)}
for
循环中的{{dump(book)}}
为您提供了什么?您尝试过listBooks['hydra:member'中的书籍吗?书籍数组似乎是hydra:member。@martias:it没有给我任何东西json\u解码($listBooks,true)代码>这样您将获得关联数组而不是对象。然后您可能可以执行{{dump(listBooks['hydra:member'])}
等操作。
{{ attribute(listBooks, 'hydra:member') }}
{{ listBooks['hydra:member'] }}