-2

我正在尝试通过以下代码解码此 json 数据,但它不起作用。

$data = 'VA_OnQueryData({"name":"John","id":"354902332592"});';
return json_decode($data);
4

3 回答 3

10

去掉callbackURL 中的参数。而不是这个:

https://api.vinaudit.com/query.php?key=VA_MAIN&callback=VA_OnQueryData&vin=1C6RR6LT3HS847897

用这个:

https://api.vinaudit.com/query.php?key=VA_MAIN&vin=1C6RR6LT3HS847897

然后,您将获得真正有用​​的 JSON。

您使用的方法是JSON-P,过去用于通过发送可执行 JavaScript 来解决跨域问题。由于CORS,客户端不再需要此方法,服务器端也不再需要此方法。

另外,请返回创建此 API 的人那里,并告诉他们他们使用了错误的Content-Type响应标头。他们正在发送text/html……应该是application/json。(参考:https ://stackoverflow.com/a/477819/362536 )

于 2018-07-12T19:39:57.660 回答
1

嗨,您尝试 json_decode 的内容不是有效的 json。

如果您必须以这种方式使用它,则需要先按如下方式对其进行清洁:

$data = 'VA_OnQueryData({"vin":"1C6RR6LT3HS847897","id":"697015470432","attributes":{"VIN":"1C6RR6LT3HS847897","Year":"2017","Make":"Ram","Model":"1500","Trim":"Lone Star","Made In":"United States","Style":"Crew Cab Pickup (4-Door)","Engine":"5.7L V8 OHV 16V"},"success":true,"error":""});';

preg_match('/{.*}/', $data, $cleaned);

return json_decode($cleaned[0]);

这个的输出是:

stdClass Object
(
    [vin] => 1C6RR6LT3HS847897
    [id] => 697015470432
    [attributes] => stdClass Object
        (
            [VIN] => 1C6RR6LT3HS847897
            [Year] => 2017
            [Make] => Ram
            [Model] => 1500
            [Trim] => Lone Star
            [Made In] => United States
            [Style] => Crew Cab Pickup (4-Door)
            [Engine] => 5.7L V8 OHV 16V
        )

    [success] => 1
    [error] => 
)
于 2018-07-12T19:51:24.510 回答
0

它不起作用,因为它不是 json。试试这个:

$data = '{"name":"John","id":"354902332592"}';
return json_decode($data);
于 2018-07-12T19:34:34.630 回答