另一个简单的PHP JSON DECODE挑战

时间:2012-10-09 00:01:37

标签: php json

我正在尝试解码一些JSON - 它正确地提取了值,但也产生了错误。

以下是var_dump

["success"]=>
bool(true)
["providers"]=>
array(2) {
[0]=>
object(stdClass)#5 (15) {
  ["address1"]=>
  string(14) "3240 W Lake St"
  ["address2"]=>
  NULL
  ["city"]=>
  string(11) "Minneapolis"
  ["crossStreet"]=>
  string(26) "Lake Street & Market Plaza"
  ["description"]=>
  string(55) "test location28402 description of services/prices/hours"
  ["distance"]=>
  float(0.42900015862223)
  ["lat"]=>
  float(44.948469)
  ["lon"]=>
  float(-93.321155)
  ["name"]=>
  string(17) "testlocation28402"
  ["phone"]=>
  string(10) "6125551212"
  ["precise"]=>
  bool(true)
  ["state"]=>
  string(2) "MN"
  ["url"]=>
  string(41) "http://www.testlocation28402.com?id=28402"
  ["urlCaption"]=>
  string(25) "www.testlocation28402.com"
  ["zip"]=>
  string(9) "554164512"
}
[1]=>
object(stdClass)#6 (15) {
  ["address1"]=>
  string(19) "4335 Excelsior Blvd"
  ["address2"]=>
  NULL
  ["city"]=>
  string(16) "Saint Louis Park"
  ["crossStreet"]=>
  NULL
  ["description"]=>
  string(55) "test location26358 description of services/prices/hours"
  ["distance"]=>
  float(0.91979730006713)
  ["lat"]=>
  float(44.935773)
  ["lon"]=>
  float(-93.33489)
  ["name"]=>
  string(17) "testlocation26358"
  ["phone"]=>
  string(10) "6125551212"
  ["precise"]=>
  bool(true)
  ["state"]=>
  string(2) "MN"
  ["url"]=>
  string(41) "http://www.testlocation26358.com?id=26358"
  ["urlCaption"]=>
  string(25) "www.testlocation26358.com"
  ["zip"]=>
  string(9) "554164811"
}
  } 
["errors"]=>array(0) {
}
}

以上是变量var_dump n的$jso。我试图用:

提取CITY字段
$json = json_decode($surescript);

foreach ($json as $providers){
foreach($providers as $onespot) {
echo "*";
echo $onespot->city;
echo "\n";
}
}

输出:


警告 /home/content/96/7973196/html/channels/MIL432/storeFinder_2.php 153 中为foreach()提供的参数无效
*明尼阿波利斯 *圣路易斯公园

因此,它正在获取正确的嵌套变量,但也会在第二个foreach循环中抛出错误。

我做错了什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您正在迭代外部循环中JSON中的所有内容,这意味着它正在尝试解析success部分,providers部分以及errors部分。

当您尝试解析success时,您无法迭代内部循环中的内容,因此错误。 errors部分是一个数组,因此您可以对其进行迭代 - 因为其中没有任何内容,因此没有错误/警告来尝试访问city,其中不存在。

仅解析提供者:

$json = json_decode($surescript);

foreach ($json->providers as $provider){
    echo "*";
    echo $provider->city;
    echo "\n";
}