Php 我无法在此返回json中获取特定值
下面的代码返回给我一个json,我想得到Lat和Long的值,但我无论如何都不能,我已经尝试过几种形式(使用网站的其他教程),有人能帮我吗Php 我无法在此返回json中获取特定值,php,json,get,Php,Json,Get,下面的代码返回给我一个json,我想得到Lat和Long的值,但我无论如何都不能,我已经尝试过几种形式(使用网站的其他教程),有人能帮我吗 <?php $data = array('email'=>'XXXUSERXXX','password'=>'XXXPASSXXX'); $data2 = json_encode($data); $headers = [ 'x-api-key: XXXKEYXXX', 'Accept: application/j
<?php
$data = array('email'=>'XXXUSERXXX','password'=>'XXXPASSXXX');
$data2 = json_encode($data);
$headers = [
'x-api-key: XXXKEYXXX',
'Accept: application/json',
'Accept-Encoding: gzip, deflate',
'Accept-Language: en-US,en;q=0.5',
'Cache-Control: no-cache',
'Content-Type: application/json',
'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0',
'Date: Tue, 26 Jan 2017 21:13:37 GMT'
];
$ch = curl_init();
$url = 'https://api.inthegra.strans.teresina.pi.gov.br/v1/signin';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST, 1); //0 for a get request
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data2);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,100);
// curl_setopt($ch,CURLOPT_TIMEOUT, 100);
$response = curl_exec($ch);
curl_close ($ch);
$token = json_decode($response);
$auth = $token->token;
#print $auth;
#second
$headers2 = [
'x-api-key: XXXKEYXXX',
'x-auth-token:'.$auth,
'Accept: application/json',
'Accept-Encoding: gzip, deflate',
'Accept-Language: en-US,en;q=0.5',
'Cache-Control: no-cache',
'Content-Type: application/json',
'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0',
'Date: Tue, 26 Jan 2017 21:13:37 GMT'
];
$ch2 = curl_init();
$url2 = 'https://api.inthegra.strans.teresina.pi.gov.br/v1/veiculos';
#$header = array('x-api-key' => 'XXXKEYXXX','x-auth-token' => 'XXXTOKENXXX');
//$header2 = json_encode($header);
curl_setopt($ch2, CURLOPT_HTTPHEADER, $headers2);
#curl_setopt($ch, CURLOPT_HTTPHEADER, array('x-api-key' => 'XXXKEYXXX','x-auth-token' => 'XXXTOKENXXX'));
curl_setopt($ch2,CURLOPT_URL,$url2);
#curl_setopt($ch,CURLOPT_POST, 0); //0 for a get request
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, 1);
//curl_setopt($ch, CURLOPT_HTTPHEADER, "x-auth-token : XXXTOKENXXX");
//curl_setopt($ch,CURLOPT_POSTFIELDS,$data2);
curl_setopt($ch2,CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,100);
// curl_setopt($ch,CURLOPT_TIMEOUT, 100);
$response2 = curl_exec($ch2);
curl_close ($ch2);
//$string = json_decode($response2, TRUE);
//print_r($string[0]);
$jsonIterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator(json_decode($response2, TRUE)),
RecursiveIteratorIterator::SELF_FIRST);
foreach ($jsonIterator as $key => $val) {
if(is_array($val)) {
echo "$key";
} else {
echo "$key => $val\n";
}
}
?>
您可以将响应转换为数组并迭代数组元素:
$arr_data = json_decode($response2, true);
foreach( $arr_data as $key => $value ) {
foreach ($value as $key2 => $sub_value) {
$lat = $sub_value['Veiculos'][0]['Lat'];
$long = $sub_value['Veiculos'][0]['Long'];
echo $lat . ', ' . $long;
}
}
能否添加var_dump($response2);旋涡关闭前($ch2);然后在这里发布一个输出?嗨,输出是:string(27808)“[{”Linha:{”CodigoLinha:“0402”,“Denomicao:“VILA BANDEIRANTE-PLANALTO in inga FREI SERAFIM”,“Origem:“VILA BANDEIRANTE”,“returno:“PCA.BANDEIRA”,“Circular:”true,“Veiculos:[{”CodigoVeiculo:“02154”,“Lat:”-5.06155800”,“Long:“-42.77045700”,“Hora:“19:29:52”}}}}}}有几个数据集是这种类型的:(相同的结构),我没有把所有的都放进去,因为它不适合:/perfect!接受这个答案将不胜感激)
$arr_data = json_decode($response2, true);
foreach( $arr_data as $key => $value ) {
foreach ($value as $key2 => $sub_value) {
$lat = $sub_value['Veiculos'][0]['Lat'];
$long = $sub_value['Veiculos'][0]['Long'];
echo $lat . ', ' . $long;
}
}