将json转换为数组并比较差异

时间:2013-04-09 15:32:40

标签: php arrays json api

我正在尝试从这两个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 ;

?>

现在结果是'Array'但我知道存在差异....有没有办法比较返回的json数据中的一个字段...在这个实例中是com-name吗?

4 个答案:

答案 0 :(得分:1)

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

另外,如果我访问网址,我会获得XML ...不是JSON。

答案 1 :(得分:0)

  1. 您需要使用file_get_contents()从这些网址获取数据。
  2. 您需要将true作为第二个参数传递给json_decode才能将结果作为数组获取:
  3. $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);
    

答案 2 :(得分:0)

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

$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()函数是很容易的部分,首先必须规划代码应该实际执行的操作。 祝你好运。

答案 3 :(得分:0)

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