CakePHP:从远程 JSON 文件获取值
CakePHP: getting a value from remote JSON file
我正在尝试从远程 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>
这是我的代码:
<?php
$tag = '11111111';
$apikey='XXXXXXXXXXXXX';
$url= 'https://example.com';
$data = array('ID'=> $tag);
$format = 'json';
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n"
."apikey : 5c1e4f40-8094-4719-9995-7475572d2efa\r\n"
. "Accept : application/$format",
'method' => 'POST',
'content' => http_build_query($data),
)
);
$context = stream_context_create($options);
$result = file_get_contents($url1, false, $context);
if ($result === FALSE) { /* Handle error */
}
var_dump($result);
if($format == 'json')
{
$response = json_decode($result);
}
var_dump($result->EndDate);
echo "END";
?>
正在尝试:
var_dump($response->EndDate);
我得到:通知(8):未定义属性:stdClass::$EndDate
正在尝试:
var_dump($response['EndDate']);
我收到一个错误:
Cannot use object of type stdClass as array.
输出:die($result);
正如@Metalik 所说,您的响应数据不是JSON,而是XML。如果您想将数据作为 XML 对象访问,请使用 simplexml_load_string()
:
$xml = simplexml_load_string($result);
并获取 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
...从 JSON 对象获取 EndDate
的第一个值:
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']);
最后,您的响应数据似乎缺少 AssetEntitlementData
的结束标记。应该是:
<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>
我正在尝试从远程 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>
这是我的代码:
<?php
$tag = '11111111';
$apikey='XXXXXXXXXXXXX';
$url= 'https://example.com';
$data = array('ID'=> $tag);
$format = 'json';
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n"
."apikey : 5c1e4f40-8094-4719-9995-7475572d2efa\r\n"
. "Accept : application/$format",
'method' => 'POST',
'content' => http_build_query($data),
)
);
$context = stream_context_create($options);
$result = file_get_contents($url1, false, $context);
if ($result === FALSE) { /* Handle error */
}
var_dump($result);
if($format == 'json')
{
$response = json_decode($result);
}
var_dump($result->EndDate);
echo "END";
?>
正在尝试:
var_dump($response->EndDate);
我得到:通知(8):未定义属性:stdClass::$EndDate
正在尝试:
var_dump($response['EndDate']);
我收到一个错误:
Cannot use object of type stdClass as array.
输出:die($result);
正如@Metalik 所说,您的响应数据不是JSON,而是XML。如果您想将数据作为 XML 对象访问,请使用 simplexml_load_string()
:
$xml = simplexml_load_string($result);
并获取 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
...从 JSON 对象获取 EndDate
的第一个值:
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']);
最后,您的响应数据似乎缺少 AssetEntitlementData
的结束标记。应该是:
<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>