从 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;
使用 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;