【问题标题】:Trying to get property of non-object, but it is an object试图获取非对象的属性,但它是一个对象
【发布时间】:2019-02-28 13:59:27
【问题描述】:

我尝试获取对象的属性。

function page($json, $name) {
    $data = json_decode($json);
    //$0 = '0';

    $cSKU = '574294403';
    var_dump($data->variations->$cSKU->dimensions->dimension);
}

返回:

array(3) { [0]=> object(stdClass)#5030 (1) { ["color"]=> object(stdClass)#5029 (5) { ["displayName"]=> string(5) "Farbe" ["value"]=> string(12) "schwarz-blau" ["colorHexCode"]=> string(7) "#19181d" ["baseColor"]=> string(7) "schwarz" ["iconId"]=> string(8) "26183061" } } [1]=> object(stdClass)#5032 (1) { ["version"]=> object(stdClass)#5031 (2) { ["displayName"]=> string(11) "Ausführung" ["value"]=> string(8) "RH 48 cm" } } [2]=> object(stdClass)#5034 (1) { ["unknown"]=> object(stdClass)#5033 (3) { ["displayName"]=> string(7) "Unknown" ["value"]=> string(21) "27,5+ Zoll (69,85 cm)" ["name"]=> string(7) "unknown" } } }

但是:

    $cSKU = '574294403';
    var_dump($data->variations->$cSKU->dimensions->dimension->color);
}

返回:

Trying to get property of non-object in ...

怎么了?

【问题讨论】:

  • array(3) { ...
  • 你有一个对象数组
  • 我明白了.. 我怎样才能提取它们?
  • 您可以遍历对象数组。或按索引定位。如果遇到困难,请包含您的 JSON。

标签: php json object properties


【解决方案1】:

根据您的var_dump()...

array(3) { 
    [0]=> object(stdClass)#5030 (1) {
        ["color"]=> object(stdClass)#5029 (5) {
            ["displayName"]=> string(5) "Farbe"
            ["value"]=> string(12) "schwarz-blau"
            ["colorHexCode"]=> string(7) "#19181d"
            ["baseColor"]=> string(7) "schwarz"
            ["iconId"]=> string(8) "26183061"
        }
    }
    [1]=> object(stdClass)#5032 (1) {
        ["version"]=> object(stdClass)#5031 (2) {
            ["displayName"]=> string(11) "Ausführung"
            ["value"]=> string(8) "RH 48 cm"
        }
    }
    [2]=> object(stdClass)#5034 (1) {
        ["unknown"]=> object(stdClass)#5033 (3) {
            ["displayName"]=> string(7) "Unknown"
            ["value"]=> string(21) "27,5+ Zoll (69,85 cm)"
            ["name"]=> string(7) "unknown"
        }
    }
}

...颜色对象在dimension的第一个数组元素中。

这些方法中的任何一种都可以,选择权在你。

代码:(Demo)

$json = '{"variations":{"574294403":{"dimensions":{"dimension":[{"color":{"displayName":"Farbe","value":"schwarz-blau","colorHexCode":"#19181d","baseColor":"schwarz","iconId":"26183061"}},{"version":{"displayName":"Ausf\\u00fchrung","value":"RH 48 cm"}},{"unknown":{"displayName":"Unknown","value":"27,5+ Zoll (69,85 cm)","name":"unknown"}}]}}}}';

$data = json_decode($json);
$cSKU = '574294403';
//var_dump($data->variations->$cSKU->dimensions->dimension);
var_dump($data->variations->$cSKU->dimensions->dimension[0]->color);

echo "\n---\n";

$array = json_decode($json, true);
var_dump($array["variations"][$cSKU]["dimensions"]["dimension"][0]["color"]);

输出:

object(stdClass)#1 (5) {
  ["displayName"]=>
  string(5) "Farbe"
  ["value"]=>
  string(12) "schwarz-blau"
  ["colorHexCode"]=>
  string(7) "#19181d"
  ["baseColor"]=>
  string(7) "schwarz"
  ["iconId"]=>
  string(8) "26183061"
}

---
array(5) {
  ["displayName"]=>
  string(5) "Farbe"
  ["value"]=>
  string(12) "schwarz-blau"
  ["colorHexCode"]=>
  string(7) "#19181d"
  ["baseColor"]=>
  string(7) "schwarz"
  ["iconId"]=>
  string(8) "26183061"
}

【讨论】:

  • 很遗憾没有,我还在等待解决方案... =(
  • 是的,它很有效,而且我不得不即兴发挥,但最终我找到了自己的方式。这就是我需要的东西:3v4l.org/FH4r3 我唯一想念的是在没有 [2] 时忽略 $dimension[2]。我尝试了“if isset”,但没有成功..
  • 刚刚做了,非常感谢。我还在苦苦挣扎,当只有[0]和[1]的时候,如何忽略["dimension"][2]。你有什么提示吗?
  • 谢谢,它看起来不错,但对我来说太难理解了。我在这里已经有了解决方案:3v4l.org/2cVWd。现在我尝试 isset($dimension[2]) ? foreach($dimension[2] as $var3) : $var3 = " "; - 但我得到“语法错误 - 意外的 T_FOREACH”...
  • 谢谢 mickmackusa,我尝试了我的和你的两种代码,但结果 fputcsv 只放入了数组的一个值。如果你的代码 echo($subset->displayName) 返回 "Farbe" 和 "Ausführung",我需要 "$varname1 = 'Farbe' 和 $varname2 = 'Ausführung', $varname3 = 'someothervalue'。
【解决方案2】:

你应该把它变成一个数组。 在json_decode ($json, true) 中,添加第二个参数。这样就可以得到数组形式的内容了。

var_dump($data[0]['key_val']);

【讨论】:

  • 我需要添加哪个第二个参数?你有例子吗?
  • 如果你不熟悉你写的代码,那我无能为力。@AngelEyes
  • 很遗憾我不写这个代码,我什至不是一个程序员,但是写这个的程序员已经不在了。所以我尝试自己修复一些错误...
猜你喜欢
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多