-1

我正在尝试从这两个 json 中获取返回的结果并比较差异以仅显示唯一值。我尝试了许多其他方法,但似乎没有任何效果。这段代码给了我参数 #1 不是一个数组...对我在这里缺少的有什么帮助吗?

<?php
$json = file_get_contents("http://ebird.org/ws1.1/data/obs/region/recent?rtype=subnational1&r=US-AZ&back=7&fmt=json");
$json2 = file_get_contents("http://ebird.org/ws1.1/data/obs/region/recent?rtype=subnational1&r=US-NV&back=7&fmt=json");

$array1 = json_decode($json, TRUE);
$array2 = json_decode($json2, TRUE);

$result = array_diff($array1, $array2);

echo $result ;

?>

现在结果是“数组”,但我知道存在差异......有没有办法只比较返回的 json 数据中的一个字段......在这个例子中是 com-name?

4

4 回答 4

1

您的变量是字符串(网址)而不是 JSON。您正在尝试 json_decode 一个网址!

此外,如果我访问 url,我会得到 XML ...不是 JSON。

于 2013-04-09T15:36:54.183 回答
0
  1. 您需要使用file_get_contents()从这些 URL 获取数据。
  2. 您需要true作为第二个参数传递json_decode以将结果作为数组获取:

.

$xml  = file_get_contents('http://ebird.org/ws1.1/data/obs/region/recent?rtype=subnational1&r=US-AZ&back=7&format=json');
$xml2 = file_get_contents('http://ebird.org/ws1.1/data/obs/region/recent?rtype=subnational1&r=US-NV&back=7&format=json');

$array1 = json_decode($xml, true);
$array2 = json_decode($xml2, true);
于 2013-04-09T15:33:35.397 回答
0

您所做的实际上是尝试将URL ADDRESSES解码为 JSON 格式,而不是在这些特定 url 地址中找到的内容。为了对内容而不是 URL 本身进行 JSON 解码,您可以使用以下代码:

$content = file_get_contents($xml); //get the content that is found in the url that $xml holds
$json = json_decode($content);  //now json decode the content , and not the url itself

我希望它能帮助你理解你做错了什么。使用 file_get_contents() 和 json_decode() 函数很容易,首先你必须计划你的代码应该做什么。祝你好运。

于 2013-04-09T15:44:49.693 回答
0

正如上面的海报所说,您将需要实际检索文件。只需调用 json_decode 就会尝试解码 JSON 字符串,这根本不是您想要实现的目标。

于 2013-04-09T15:45:12.670 回答