如何从json_decode()
获得数组?
我有一个这样的数组:
$array = array(
'mod_status' => 'yes',
'mod_newsnum' => 5
);
我将其保存在数据库中,如JSON编码:
{"mod_status":"yes","mod_newsnum":5}
现在我想从数据库中再次获取数组。但是当我使用时:
$decode = json_decode($dbresult);
我明白了:
stdClass Object (
[mod_status] => yes
[mod_newsnum] => 5
)
而不是数组。如何获取数组而不是对象?
答案 0 :(得分:22)
将json_decode
的第二个参数设置为true以强制关联数组:
$decode = json_decode($dbresult, true);
答案 1 :(得分:7)
根据http://in3.php.net/json_decode:
$decode = json_decode($dbresult, TRUE);
答案 2 :(得分:2)
$decode = json_decode($dbresult, true);
或者
$decode = (array)json_decode($dbresult);
答案 3 :(得分:1)
将json_decode
的对象结果转换为数组可能会产生意外结果(并导致令人头疼)。因此,建议使用json_decode($json, true)
代替(array)json_decode($json)
。这是一个例子:
断裂:
<?php
$json = '{"14":"29","15":"30"}';
$data = json_decode($json);
$data = (array)$data;
// Array ( [14] => 29 [15] => 30 )
print_r($data);
// Array ( [0] => 14 [1] => 15 )
print_r(array_keys($data));
// all of these fail
echo $data["14"];
echo $data[14];
echo $data['14'];
// this also fails
foreach(array_keys($data) as $key) {
echo $data[$key];
}
工作:
<?php
$json = '{"14":"29","15":"30"}';
$data = json_decode($json, true);
// Array ( [14] => 29 [15] => 30 )
print_r($data);
// Array ( [0] => 14 [1] => 15 )
print_r(array_keys($data));
// all of these work
echo $data["14"];
echo $data[14];
echo $data['14'];
// this also works
foreach(array_keys($data) as $key) {
echo $data[$key];
}
答案 4 :(得分:0)
如果您只在PHP中使用该数据,我建议使用serialize
和unserialize
,否则您永远无法区分对象和关联数组,因为当对象类信息丢失时编码为JSON。
<?php
class myClass{// this information will be lost when JSON encoding //
public function myMethod(){
echo 'Hello there!';
}
}
$x = array('a'=>1, 'b'=>2);
$y = new myClass;
$y->a = 1;
$y->b = 2;
echo json_encode($x), "\n", json_encode($y); // identical
echo "\n", serialize($x), "\n", serialize($y); // not identical
?>