CakePHP:从远程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<

我试图从远程JSON文件中获取特定值(“EndDate”的第一个值)

我的JSON如下所示:

<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