json_decode到数组

时间:2011-03-02 07:03:41

标签: php arrays json

我正在尝试将JSON字符串解码为数组,但是我收到以下错误。

  

致命错误:无法使用类型的对象   stdClass作为数组   C:\ wamp \ www \ temp \ asklaila.php上线   6

以下是代码:

<?php
$json_string = 'http://www.domain.com/jsondata.json';

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);
?>

12 个答案:

答案 0 :(得分:755)

根据the documentation,您需要指定是否需要关联数组而不是json_decode中的对象,这将是代码:

json_decode($jsondata, true);

答案 1 :(得分:38)

试试这个

$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);

答案 2 :(得分:22)

这是一个迟到的贡献,但有一个有效的案例,用json_decode来投射(array)
请考虑以下事项:

$jsondata = '';
$arr = json_decode($jsondata, true);
foreach ($arr as $k=>$v){
    echo $v; // etc.
}

如果$jsondata作为空字符串返回(根据我的经验常常是这样),json_decode将返回NULL,从而导致错误警告:参数无效为第3行的foreach()提供。您可以添加一行if / then代码或三元运算符,但IMO更简洁,只需将第2行更改为...

$arr = (array) json_decode($jsondata,true);

...除非您同时json_decode数百万个大型阵列,在这种情况下,@ TCB13指出,性能可能会受到负面影响。

答案 3 :(得分:6)

答案 4 :(得分:6)

这也将把它改成一个数组:

<?php
    print_r((array) json_decode($object));
?>

答案 5 :(得分:3)

json_decode支持第二个参数,当设置为TRUE时,它将返回Array而不是stdClass Object。查看json_decode函数的Manual页面,查看所有支持的参数及其详细信息。

例如试试这个:

$json_string = 'http://www.example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, TRUE); // Set second argument as TRUE
print_r($obj['Result']); // Now this will works!

答案 6 :(得分:3)

根据PHP Documentation json_decode函数有一个名为 assoc 的参数,它将返回的对象转换为关联数组

 mixed json_decode ( string $json [, bool $assoc = FALSE ] )

由于 assoc 参数默认为FALSE,因此您必须将此值设置为TRUE才能检索数组。

检查以下代码以获取示例含义:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));

输出:

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

答案 7 :(得分:2)

请试试这个

<?php
$json_string = 'http://www.domain.com/jsondata.json';

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, true);
echo "<pre>"; print_r($obj['Result']);
?>

答案 8 :(得分:2)

我希望这会对您有所帮助

$json_ps = '{"courseList":[  
            {"course":"1", "course_data1":"Computer Systems(Networks)"},  
            {"course":"2", "course_data2":"Audio and Music Technology"},  
            {"course":"3", "course_data3":"MBA Digital Marketing"}  
        ]}';

使用Json解码功能

$json_pss = json_decode($json_ps, true);

在php中遍历JSON数组

foreach($json_pss['courseList'] as $pss_json)
{

    echo '<br>' .$course_data1 = $pss_json['course_data1']; exit; 

}

结果:计算机系统(网络)

答案 9 :(得分:1)

在PHP中json_decode将json数据转换为PHP关联数组
对于Ex:$php-array= json_decode($json-data, true); print_r($php-array);

答案 10 :(得分:1)

试试这样:

$json_string = 'https://example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj->Result);
foreach($obj->Result as $value){
  echo $value->id; //change accordingly
}

答案 11 :(得分:1)

json_decode($data, true); // Returns data in array format 

json_decode($data); // Returns collections 

因此,如果想要一个数组,则可以在json_decode函数中将第二个参数传递为'true'。