【问题标题】:Get JSON object from URL Difficulties从 URL 困难中获取 JSON 对象
【发布时间】:2015-09-29 13:28:46
【问题描述】:

我无法从该 URL 获取任何 JSON 信息。

我尝试了其他 JSON sn-ps,它们似乎可以工作,所以我不确定是不是 URL 的结构方式。

下面的基本示例。

<?php
    $json = file_get_contents('http://nhs-sh.cfpreview.co.uk/api/version/fetchLatestData?dataType=Clinics&versionNumber=-1&uuID=website&dt=');
    $obj = json_decode($json);
    echo "Body: " . $obj->Body;
?>

【问题讨论】:

  • 从看起来你得到一个{data : { ...}} json 的东西来看,非常标准的东西。如果您希望使用数组来代替,您可以使用json_decode($jsondata, true);(我知道我会的)。
  • 什么是有效的?
  • 谢谢安德鲁。尝试将其设置为 true 但仍然没有出现。这是另一个来自 StackOverflow 的例子,乔恩,但它似乎只是我的 URL 没有。
  • 返回的 JSON 好像有问题。我的测试返回 JSON_ERROR_SYNTAX,这可能意味着很多事情,但基本上,PHP 无法解码它。
  • 第一个数据标签失败,应该用引号括起来。

标签: php json


【解决方案1】:

提供的链接以

开头
{ data :

这是有效的 javascript 但无效的 json。您可以在http://jsonlint.com 上对其进行测试。为了解决这个问题,我们可以将 data 替换为 "data"

$json = file_get_contents('http://nhs-sh.cfpreview.co.uk/api/version/fetchLatestData?dataType=Clinics&versionNumber=-1&uuID=website&dt=');
$obj = json_decode($json);

if (json_last_error() !== JSON_ERROR_NONE) { //check if there was an error decoding json
    $json = '{ "data" :'. substr(trim($json), 8); // replace the first 8-1 characters with { "data" :
    $obj = json_decode($json); 
}

print_r($obj->data); //show contents of data

请注意,此修复取决于数据源,例如如果他们将data 更改为dataset。正确的措施是要求开发人员修复他们的 json 实现。

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多