【问题标题】:Call Bing Distance Matrix from PHP - JSON input could not be read从 PHP 调用 Bing 距离矩阵 - 无法读取 JSON 输入
【发布时间】: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到底是什么? $jsonbase or $content or $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


【解决方案1】:

通过聊天解决了这个问题,问题是 API 要求 originsdestinations 是一个纬度/经度数组,但仔细查看生成的 JSON origins 并不是因为它是一个单一的原始数据中的值。

所以将单个 origin 元组放入数组中解决了它,产生了这个 JSON:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多