我正在尝试进行外部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代码,并且能够毫无问题地返回结果。
每个人,我都为这种困惑感到遗憾,但感谢您的努力!
答案 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”。