gpt4 book ai didi

json - 如何使用来自 api-platform 的 JSON

转载 作者:行者123 更新时间:2023-12-03 20:30:37 25 4
gpt4 key购买 nike

我已经安装了 api-platform在服务器上进行了演示,我做了一个客户端应用程序(使用 Symfony 3.3),我想在经典 View (Twig)中显示响应。

一切正常:我可以请求和检索响应。

但这就是我卡住的地方:当我在我看来转储响应时,我得到了这个

 {"@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}

这是我的 Controller 的方法:
 //...
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
));
}

我也试过 json_decode 并使用 JMSSerializer在 $listBooks 上。
我得到了一个漂亮的对象,但我仍然无法通过执行类似的操作来访问 JSON 属性,例如 ISBN、title
 {% for book in listBooks %}
{{ dump(book.title) }}
<!-- .... -->
{% endfor %}

这是我在 json_decode $listBooks 时得到的:
  {{ dump(listBooks) }}

enter image description here

当我尝试访问这样的每个字段时出现错误
  {{ dump(listBooks.@id) }}
{{ dump(listBooks['hydra:member']) }}
....

我错过了什么吗?

谢谢

最佳答案

$dataBooks->getBody()->getContents();返回一个字符串,如 Guzzle's documentation 中所述,所以你需要使用 json_decode .
$listBooks = json_decode($listBooks);返回一个对象。在 Twig 中,您可以使用点符号来访问对象的方法和属性,例如{{ listBooks.myProp }} .但是因为hydra:member包含一个特殊字符( : ),您需要使用 Twig's attribute function ,如 Twig's documentation 中所述:

{{ attribute(listBooks, 'hydra:member') }}

另一种做法是做 $listBooks = json_decode($listBooks, true);这样你就可以得到一个关联数组而不是一个对象。然后你可以在 Twig 中使用括号表示法:
{{ listBooks['hydra:member'] }}

我更喜欢第二种方法,因为在我看来 {{ listBooks['hydra:member'] }}{{ attribute(listBooks, 'hydra:member') }}更清晰更干净.

关于json - 如何使用来自 api-platform 的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com