ChatGPT解决这个技术问题 Extra ChatGPT

json_decode 到数组

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

致命错误:不能在第 6 行的 C:\wamp\www\temp\asklaila.php 中使用 stdClass 类型的对象作为数组

这是代码:

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

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);
?>
如果您改为使用 $ob->Result 访问,它会起作用。

A
AbraCadaver

根据 the documentation,如果您想要一个关联数组而不是 json_decode 中的对象,则需要将 true 指定为第二个参数。这将是代码:

$result = json_decode($jsondata, true);

如果您想要 integer 键而不是任何属性名称:

$result = array_values(json_decode($jsondata, true));

但是,使用您当前的解码,您只需将其作为对象访问:

print_r($obj->Result);

这就引出了一个问题,让它作为数组而不是对象返回有什么好处?
它提出了这个问题。 “乞求一个问题”意味着假设一些有待证明的事情(ref)。在任何一种情况下,优点可能是 OP 遍历数组比遍历对象更舒服,或者其他一些已经实现的代码需要一个数组。
@jamesnotjim返回对象的默认实现可能会提出一个问题,即对象比数组更好的返回值,不是吗?
确实可以@DavidMann。触摸!
我会添加评论(尽管几年后),JSON 不可能包含除数据之外的任何内容,这使得这是一个令人困惑的“默认”选择。
P
Pang

尝试这个

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

n
neokio

这是一个较晚的贡献,但将 json_decode(array) 一起转换是有效的。
请考虑以下情况:

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

如果 $jsondata 曾经作为空字符串返回(根据我的经验,它经常是这样),json_decode 将返回 NULL,从而导致错误 Warning: Invalid argument provided for foreach() on line 3< /强>。您可以添加一行 if/then 代码或三元运算符,但 IMO 只需将第 2 行更改为 ...

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

... 除非您同时json_decode处理数百万个大型数组,在这种情况下,正如 @TCB13 指出的那样,性能可能会受到负面影响。


A
Anuj Pandey
A
Arosha De Silva

根据 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)
}

c
coreyavis

这也将其更改为数组:

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

这是对 CPU/内存的浪费,正如 json_decode($object, true); 所建议的,true 的作用完全相同,但在内部要快得多。
@TCB13 除非您两者都需要并且不想再次运行解码
同意@JimmyKane。我尝试循环运行两个版本;如果您同时需要对象和数组(尽管这种情况应该很少发生?),json_decode + 强制转换比同时运行两种风格的 json_decode 快 45%。另一方面,两者都非常快,除非您确实需要 数千 次解码,否则差异可以忽略不计。
B
Bugs

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!

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

json_decode($data); // Returns collections 

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


P
Pavan Kumar

我希望这能帮到您

$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; 

}

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


S
Salman Mohammad

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


D
Dipali Sakle Systematix

请试试这个

<?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']);
?>

l
lalithkumar

试试这样:

$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
}