【发布时间】:2014-07-18 14:13:37
【问题描述】:
$val_array = json_decode($json_data, true);
我解码了一个 JSON 数组并将其存储到一个变量中。 JSON 有来自服务器端的数据。
当我 var dump 这个数组 var_dump($val_array); 我得到:
{
"groups": {
"connect": "yes",
"Name": "admin",
"id": "1",
"Groups": "1",
"manage": "1",
"Users": "1",
"show": "1",
"log": "1"
}
}
然后我检查数组的大小。
$x=count($val_array); gives 1 as output
$x=count($val_array['groups']); gives 8 as output
当我的数据库中有更多数据时,JSON 看起来像这样
{
"groups": [{
"connect": "yes",
"Name": "admin",
"id": "1",
"Groups": "1",
"manage": "1",
"Users": "1",
"show": "1",
"log": "1"
},
{
"connect": "no",
"Name": "noadmin",
"id": "2",
"Groups": "2",
"manage": "2",
"Users": "2",
"show": "2",
"log": "2"
}
] }
我想将值显示到 html 表中。我使用了一个简单的 for 循环。
$val_array = $val_array['groups'];
for($i=0; $i<$x; $i++)
{
$a= $val_array['connect'];
$b= $val_array['Name'];
$c= $val_array['id'];
$d= $val_array['Groups'];
$e= $val_array['manage'];
$f= $val_array['Users'];
$g= $val_array['show'];
$h= $val_array['log'];
}
我应该使用$x 的值是多少?
当我使用$x=count($val_array); 时,如果 JSON 有超过 1 个数据,则会出现错误。未定义的偏移量什么的,如果数据只有1,那么它可以工作。
当我使用这个$x=count($val_array['groups']); 时,如果 JSON 数据有 1 个数据,大小返回为 8。
我用的时候
$x=count($val_array['groups']);
和
var_dump($val_array);
我的页面中有:Notice: Undefined offset: 0
大小为 8。
array (size=1)
'groups' =>
array (size=8)
'connect' => string '1' (length=1)
'Name' => string 'admin' (length=10)
'id' => string '1' (length=1)
'Groups' => string '1' (length=1)
'manage' => string '1' (length=1)
'Users' => string '1' (length=1)
'show' => string '1' (length=1)
'log' => string '1' (length=1)
作为 var_dump 输出。
【问题讨论】:
-
第二种情况下的 JSON 格式错误。分组结束后
}后需要一个逗号 -
你能告诉我们
var_dump($val_array);解码后的第二个json字符串吗? -
使用
foreach而不是for。 -
var_dump()从什么时候开始显示这样的关联数组?它总是将数据的类型放在第一位,并以Array(size)开头,在键和值之间显示=>,而不是:。这看起来更像是原始 JSON,而不是var_dump的输出。 -
即使添加了逗号,它仍然不是有效的 JSON。
{ }包围对象,每个元素都必须采用key: value的形式。您没有第二个值的键。你确定不是groups: [ { ... }, { ...} ]?