CakePHP:从远程JSON文件获取值
我试图从远程JSON文件中获取特定值(“EndDate”的第一个值) 我的JSON如下所示:CakePHP:从远程JSON文件获取值,cakephp,cakephp-3.x,Cakephp,Cakephp 3.x,我试图从远程JSON文件中获取特定值(“EndDate”的第一个值) 我的JSON如下所示: <AssetEntitlementData> <AssetEntitlement> <EndDate>2016-03-18T23:59:59</EndDate> <EntitlementType>EXTENDED</EntitlementType> <ItemNumber>995-1933<
<AssetEntitlementData>
<AssetEntitlement>
<EndDate>2016-03-18T23:59:59</EndDate>
<EntitlementType>EXTENDED</EntitlementType>
<ItemNumber>995-1933</ItemNumber>
<ServiceLevelCode>ND</ServiceLevelCode>
</AssetEntitlement>
<AssetEntitlement>
<EndDate>2016-03-18T23:59:59</EndDate>
<EntitlementType>EXTENDED</EntitlementType>
<ItemNumber>995-2093</ItemNumber>
</AssetEntitlement>
<AssetEntitlement>
<EndDate>2014-03-18T23:59:59</EndDate>
<EntitlementType>INITIAL</EntitlementType>
<ItemNumber>995-0923</ItemNumber>
<ServiceLevelCode>ND</ServiceLevelCode>
</AssetEntitlement>
<AssetEntitlement>
<EndDate>2014-03-18T23:59:59</EndDate>
<EntitlementType>INITIAL</EntitlementType>
<ItemNumber>995-1553</ItemNumber>
<ServiceLevelCode>TS</ServiceLevelCode>
</AssetEntitlement>
</AssetEntitlementData>
</AssetEntitlementData>
我得到:通知(8):未定义的属性:stdClass::$EndDate
尝试:
var_dump($response->EndDate);
var_dump($response['EndDate']);
我有一个错误:
无法将stdClass类型的对象用作数组
输出:die($result)代码>
正如@Metalik所说,您的响应数据不是JSON,而是XML。如果要以XML对象的形式访问数据,请使用simplexml\u load\u string()
:
并获取EndDate
的第一个值:
var_dump((string)$xml->AssetEntitlement[0]->EndDate);
要以JSON对象的形式访问数据,请将$xml
转换为JSON字符串,然后再转换为JSON对象:
$json = json_encode($xml); // To JSON string
$response = json_decode($json); // To JSON object
var_dump($response->AssetEntitlement[0]->EndDate);
…要从JSON对象获取EndDate
的第一个值:
$json = json_encode($xml); // To JSON string
$response = json_decode($json); // To JSON object
var_dump($response->AssetEntitlement[0]->EndDate);
要以关联数组的形式访问数据,请将$xml
转换为JSON字符串,然后转换为关联数组:
$json = json_encode($xml); // To JSON string
$response = json_decode($json, true); // To associative array
…要从数组中获取EndDate
的第一个值:
var_dump($response['AssetEntitlement'][0]['EndDate']);
最后,您的响应数据似乎缺少AssetentTitlementData
的结束标记。应该是:
<AssetEntitlementData>
<AssetEntitlement>
<EndDate>2016-03-18T23:59:59</EndDate>
<EntitlementType>EXTENDED</EntitlementType>
<ItemNumber>995-1933</ItemNumber>
<ServiceLevelCode>ND</ServiceLevelCode>
</AssetEntitlement>
<AssetEntitlement>
<EndDate>2016-03-18T23:59:59</EndDate>
<EntitlementType>EXTENDED</EntitlementType>
<ItemNumber>995-2093</ItemNumber>
</AssetEntitlement>
<AssetEntitlement>
<EndDate>2014-03-18T23:59:59</EndDate>
<EntitlementType>INITIAL</EntitlementType>
<ItemNumber>995-0923</ItemNumber>
<ServiceLevelCode>ND</ServiceLevelCode>
</AssetEntitlement>
<AssetEntitlement>
<EndDate>2014-03-18T23:59:59</EndDate>
<EntitlementType>INITIAL</EntitlementType>
<ItemNumber>995-1553</ItemNumber>
<ServiceLevelCode>TS</ServiceLevelCode>
</AssetEntitlement>
</AssetEntitlementData>
2016-03-18T23:59:59
延伸
995-1933
钕
2016-03-18T23:59:59
延伸
995-2093
2014-03-18T23:59:59
最初的
995-0923
钕
2014-03-18T23:59:59
最初的
995-1553
TS
来自服务的响应不是json,它是xml格式的,您不能使用json_解码功能。我尝试了以下方法:在:$format='xml';之前。。。。。。。。。。if($format=='json'){$response=json_encode($result);}elseif($format=='xml'){$response=new simplexmlement($result);}
但它不起作用。如果您确定获得json响应,则应使用$response->enddate。如果您希望以数组形式访问它,则应将assoc flag设置为TRUE<代码>$response=json_decode($result,true)
@ubuntux我尝试了这两种方法:$response=json\u decode($result,true)
和$response=json_encode($result,true)代码>。我得到这个:通知(8):试图获得非反对的财产谢谢。我仍然会遇到错误:在$xml=simplexml\u load\u string($result)中代码>:警告(2):simplexml加载字符串():实体:第1行:解析器错误:应为开始标记,“'not found
”--警告(2):simplexml加载字符串()[]:{“AssetWarrantyResponse”:[],“InvalidFormatAssets”:{“BadAssets”:[“n/a 09”},“Inva
--在变量转储($response->AssetentTitlement[0]>EndDate);
:注意(8):尝试获取非对象的属性
在我的问题中,我刚刚添加了一个XML fiie的屏幕截图。你能粘贴die($result);
的输出吗?似乎响应数据上的标记不正确。我为die($result)添加了一个屏幕截图在我的问题中,我尝试了XML而不是JSON,$XML变量正确地显示了内容。但是我仍然在var_dump((string)$XML->AssetEntitlement[0]->EndDate);--我得到了:注意(8):尝试获取非对象的属性–10分钟前的mbenjemaa