从 JSON 显示 @odata 属性 或带有 PHP 的索引值

Display @odata property or index value with PHP from JSON

使用 PHP,我从 URL 中得到 JSON,如下所示:

{
  "@odata.count": 66547,
  "value": [
    {
      "@odata.context": "https://api.bridgedataoutput.com/api/v2/OData/actris/$metadata#PropertyUnitType",
      "@odata.id": "https://api.bridgedataoutput.com/api/v2/OData/actris/PropertyUnitType('51e19b6486d3d28a7cf543d5efafc534')",
      "ACTRIS_NumHalfBaths": 1,
    }
  ]
}

我的 PHP 代码是这样的:

<?php 
$url = 'https://api.bridgedataoutput.com/api/v2/OData/actris/PropertyUnitTypes?access_token=TOKEN';

$jsonb = file_get_contents($url);
$jsonbtrue = json_decode($jsonb,true);
$jsonbfalse = json_decode($jsonb);
$nextlink = $jsonbtrue['@odata.nextLink'];
$valuedata = $jsonbfalse->value;

echo "Search results are: $nextlink";

foreach($valuedata as $datavalue):
    echo $datavalue->ACTRIS_NumHalfBaths;
    echo $datavalue['@odata.id'];
endforeach;

?>

我不知道如何显示 @odata.id。如果我将它从 PHP 代码中删除,ACTRIS_NumHlafBaths 看起来就很好。如果我尝试回显 @odata.id 我会收到此错误:

Uncaught Error: Cannot use object of type stdClass as array

我可以很好地显示 @odata.count,因为它不是嵌套的,也不在循环中。

对我做错了什么有什么想法吗?

您有 $jsonbtrue 数组和 $jsonbfalse 对象。对于无效 属性 名称的对象,您需要 Complex (curly) Syntax:

echo $jsonbfalse->value[0]->{'@odata.id'};

对于数组:

echo $jsonbtrue['value'][0]['@odata.id'];

由于您的 $datavalue 是一个对象:

foreach($valuedata as $datavalue):
    echo $datavalue->ACTRIS_NumHalfBaths;
    echo $datavalue->{'@odata.id'};
endforeach;

如果你坚持只使用数组,那么你就不必担心哪些部分是数组,哪些部分是对象,你也不必担心无效的 属性 名称:

foreach($jsonbtrue['value'] as $datavalue):
    echo $datavalue['ACTRIS_NumHalfBaths'];
    echo $datavalue['@odata.id'];
endforeach;