【问题标题】:How get a valid JSON output from the response in Zend Framework 3?如何从 Zend Framework 3 中的响应中获取有效的 JSON 输出?
【发布时间】:2017-12-12 04:38:54
【问题描述】:

我正在为 API 编写客户端...

use Zend\Http\Client;
use Zend\Http\Request;
use Zend\Json\Json;
...
$request = new Request();
$request->getHeaders()->addHeaders([
    'Accept-Charset' => 'UTF-8',
    'Accept' => 'application/hal+json',
    'Content-Type' => 'application/hal+json; charset=UTF-8',
]);
$apiAddress = 'http://my.project.tld/categories';
$request->setUri($apiAddress);
$request->setMethod('GET');
$client = new Client();
$response = $client->dispatch($request);
$data = $response->getContent();

... 并得到这样的损坏 JSON:

1f9e <-- What is it?
{"_links...
\u043 <-- What is it?
1a6...
tfoli <-- What is it?
0

字符串被分成五行:

  • 第一行:仅1f9e
  • 第二行:第一个内容部分
  • 3d线:字符串1a6
  • 第四行:第二个内容部分
  • 第五行:0

为什么我会收到额外的符号/字符串?如何避免这种获取有效的 JSON 输出?

【问题讨论】:

    标签: php json zend-framework3 zend-http-client


    【解决方案1】:

    响应对象的getContent() 方法的问题。它可能无法解码从请求中获得的内容。请查看here。这可能是原因。我可能错了!

    所以它的getBody() 方法对请求的内容进行解码。所以请用这个方法代替getContent()

    $data = $response->getBody();
    

    希望对你有帮助!

    【讨论】:

    • 非常感谢您的回答!我没有使用getBody(),因为我相信我的IDE 的自动完成功能。 Zend\Http\Client#dispatch(...) 返回 Zend\Stdlib\ResponseInterface。我没有考虑过,当我只考虑getContent(...)getMetadata(...) 时,我认为getBody(...) 不再提供。但可以肯定的是,dispatch(...) 返回的具体对象是Zend\Http\Response,它提供了我需要的方法——getBody()。现在它正在工作。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多