【发布时间】:2018-03-09 19:08:27
【问题描述】:
在我的应用程序中,我从 mysql 中提取数据并调用 bing 距离矩阵服务。虽然我可以使用邮递员等来正常工作。我尝试使用各种 cURL 方法和 unirest 的任何方法都没有成功。我回来了……
无法读取 JSON 输入
说了这么多,这就是我正在做的事情......
这是我正在使用的一些示例 JSON,即 $content...
{"origins":{"latitude":"41.654570","longitude":"-71.49605"},"destinations":[{"latitude":"41.172536","longitude":"-71.555274"},{"latitude":"41.18259","longitude":"-71.567168"},{"latitude":"41.341878","longitude":"-71.695282"},{"latitude":"41.356934","longitude":"-71.63798"},{"latitude":"41.361308","longitude":"-71.625706"},{"latitude":"41.347763","longitude":"-71.67328"},{"latitude":"41.373887","longitude":"-71.665345"},{"latitude":"41.488602","longitude":"-71.38332"},{"latitude":"41.493772","longitude":"-71.137993"},{"latitude":"41.486615","longitude":"-71.246164"}],"travelMode":"driving"}
它通过 JSONLint 很漂亮,也可以在邮递员中工作。
$content 是从这个基础 $jsonbase...
构建的$jsonbase = array(
"origins" => [],
"destinations" => [],
"travelMode" => "driving",
);
这是我从 mysql 返回后正在使用的位...
$url = "https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix";
$content = json_encode($jsonbase);
$headers = array('Content-Type' => 'application/json',
'Accept' => 'application/json',
'Content-Length' => strlen ($content),
'key' => 'THISISMYKEY');
$body = Unirest\Request\Body::Json($jsonbase);
$response = Unirest\Request::post($url, $headers, $body);
我一定是错过了什么,我这辈子都想不通。在邮递员中,我的标题键设置相同。对于正文,我选择了原始类型和 JSON 内容。任何帮助或指导将不胜感激。谢谢!
【问题讨论】:
-
上面的JSON到底是什么?
$jsonbaseor$contentor$body,你确定json_encode和`...\Body::Json` 的结果是一样的吗?如果不使用其中一个的 strlen 并实际发送另一个可能会出现问题,从而导致 JSON 不完整。 -
对不起,上面的 JSON 是 $jsonbase。当我 print_r(json_encode($jsonbase)) 和 print_r($body, 内容是一样的)。
-
是的,但是
$jsonbase已经是 JSON,如果您将其编码为 JSON(再次)它将没有用...您应该将$jsonbase发送到服务。 -
虽然不是...'$jsonbase = array("origins" => [], "destinations" => [], "travelMode" => "driving", );'
-
但是
$jsonbase不是您在上面显示的 JSON :D 这就是我问的原因。所以上面的 JSON 实际上是$content我假设?
标签: php json bing-maps unirest