来自外部API调用的密钥中的PHP Json值

时间:2017-12-01 16:18:27

标签: php json

我正在尝试进行外部API调用以获取JSON数据并将其返回到我的Web应用程序中。

以下是API调用的数据:

从网址返回JSON:

{
"results":[
{
    "name":"Company1",
    "ProviderName": "ProviderName1",
    "ProviderLogo": "/images/some_image1.jpg",
    "GetURL": "/some_url_path",
    "Costs": 10000.50
},{
    "name":"Company2",
    "ProviderName": "ProviderName2",
    "ProviderLogo": "/images/some_image2.jpg",
    "applyURL": "/some_url_path",
    "Costs": 12000.50
}]
}

由于我使用的是PHP,因此我使用以下代码:

$api_data = file_get_contents('MY URL');

// Had to use 'encoded_json()' since 'json_decode()' was initially returning NULL 
$encoded_json = json_encode($api_data);
$decoded_json = json_decode($encoded_json);

// Now I want to get the specific values from the JSON result but nothing is being returned
// I tried using something like this but I'm not getting anything

foreach($decoded_json->results as $mydata)
    {
        echo 'Decoded Name: ' . $mydata->name . "\n";
    }

非常感谢任何帮助!

编辑:

所以这就是实际发生的事情,我现在要提前向所有人道歉,因为我并没有包含实际上首先抛出错误的内容!

我使用了JSON Lint并放置了我收到的所有API Json数据,它向我显示了错误发生的位置。

错误:

"SomeCostUpper": $some_variable.rawUpperCost

我使用有效的JSON测试了我的PHP代码,并且能够毫无问题地返回结果。

每个人,我都为这种困惑感到遗憾,但感谢您的努力!

4 个答案:

答案 0 :(得分:2)

$api_data = file_get_contents('MY URL');

您现在有一个字符串,其中包含该网址中的数据。

// Had to use 'encoded_json()' since 'json_decode()' was initially returning NULL 

如果json_decode返回NULL,那么您拥有的字符串不包含有效的JSON。

$encoded_json = json_encode($api_data);

现在您有一个包含URL数据的字符串的字符串表示。

$decoded_json = json_decode($encoded_json);

现在你已经改变了,所以你把原来的字符串还给了。

foreach($decoded_json->results as $mydata)

这是一个字符串。你不能这样做。

您需要修复我的网址所带来的数据。

使用JSON Lint之类的工具,会出现如下错误:

Error: Parse error on line 7:
..."Costs": 10000.50,   }, {        "name": "Comp
----------------------^
Expecting 'STRING', got '}'

在对象的最后一个条目之后,您有一个流氓逗号。

这可能是通过将字符串拼接在一起或通过手工编写来生成JSON引起的。避免这样做。使用旨在生成JSON的工具和库。

答案 1 :(得分:1)

我不知道您从哪个网站获取该JSON数据,但它不是有效的JSON,这就是json_decode()最初返回NULL的原因。有两个逗号(每个costs值有一个)不应该存在。

您通过对API调用返回的JSON数据使用第一个json_encode()然后json_decode()来“修复”该问题。您可能认为这解决了您的问题但不是,如果您查看$decoded_json内部的内容,您将看到没有可以使用的对象或数组。

这意味着当你尝试做

foreach($decoded_json->results as $mydata)
{
    echo 'Decoded Name: ' . $mydata->name . "\n";
}

它失败了,因为它无法遍历$decoded_json内的'字符串'。

如果您有turned on error reporting,您会看到以下错误:

  

E_NOTICE :输入8 - 尝试获取非对象的属性 - 在行 n

     

E_WARNING :类型2 - 为foreach()提供的参数无效 - 在行 n

答案 2 :(得分:0)

json没问题,你不需要编码然后再解码......

只是这样做:

$api_data = file_get_contents('MY URL');
$decoded_json = json_decode($api_data );

foreach($decoded_json->results as $mydata)
{
    echo 'Decoded Name: ' . $mydata->name . "\n";
}

答案 3 :(得分:-2)

您的JSON数据无效。这是有效的JSON结构。

从最后一个elemp“Costs”中删除',':“10000.50”并使用双引号作为“10000.50”。