我正在尝试解码一些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
。我试图用:
$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循环中抛出错误。
我做错了什么?
提前感谢您的帮助。
答案 0 :(得分:1)
您正在迭代外部循环中JSON中的所有内容,这意味着它正在尝试解析success
部分,providers
部分以及errors
部分。
当您尝试解析success
时,您无法迭代内部循环中的内容,因此错误。 errors
部分是一个数组,因此您可以对其进行迭代 - 因为其中没有任何内容,因此没有错误/警告来尝试访问city
,其中不存在。
仅解析提供者:
$json = json_decode($surescript);
foreach ($json->providers as $provider){
echo "*";
echo $provider->city;
echo "\n";
}