Php 如何访问此json响应中的属性?
我正在执行一个curl请求并得到一个返回json响应的响应。下面是返回响应后的代码 响应:“零替换了实令牌” 用于测试和访问属性的代码: $json=json_decode($result); 打印($json);//打印Json响应Php 如何访问此json响应中的属性?,php,json,rest,response,vtiger,Php,Json,Rest,Response,Vtiger,我正在执行一个curl请求并得到一个返回json响应的响应。下面是返回响应后的代码 响应:“零替换了实令牌” 用于测试和访问属性的代码: $json=json_decode($result); 打印($json);//打印Json响应 $firsttry = $json->result['token']; //Access Property results in error :Trying to get property of non-object $secondtry = $json['
$firsttry = $json->result['token']; //Access Property results in error :Trying to get property of non-object
$secondtry = $json['token'];
echo $firsttry.'<br>';//Code can't continue because of error from $firsttry.
print_r( $secondtry.'<br>');//Nothing Prints at all
返回响应将字符串末尾的响应替换为“true”
最后的“1或true”是否会抛出json解码
也许我错过了一些简单的事情
按要求完整测试代码
$url = "https://website.com/restapi.php";
//username of the user who is to logged in.
$userName="adminuser"; //not real user
$fields_string; //global var
$fields = array( //array will have more in the future
'username' => urlencode($userName)
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { global $fields_string;
$fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url.'?'.$fields_string.'operation=getchallenge');
curl_setopt($ch,CURLOPT_POST, count($fields));
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
json\u decode()
,默认情况下,将子对象设置为stdClass
对象而不是数组,除非它们是显式数组
尝试以下方法:
$firsttry = $json->result->token;
var_转储向您显示数据类型。由于
result
本身是一个对象,因此使用->
而不是[]
$response = '{"success":true...}'
$json = json_decode($response); //var_dumping this will show you it's an object
echo $json->result->token; // 000000000
我解决了这个问题。在卷曲选项中,我没有
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
一旦我把它放在@GentelmanMax中,这个解决方案对我有效,但问题在于curl响应直接响应,其中as返回传输返回一个php可以使用的字符串,然后允许json_decode()按原样运行。我知道这很简单 “我确实注意到了一个奇怪的异常,它在末尾打印了一个1”它不是来自
json_encode
,而是来自json_encode
之后的内容。JSONString末尾的1
使得一个无效的JSONString,我假设在响应末尾使用类似rtim的东西可以解决这个问题?让我试试看。你最好给我们看你收到curl响应的代码,因为那很可能不是你正在添加的1
不要修复症状,修复原因。默认情况下,它不会这样做,因为它看到的是{
而不是[
因此这个词是显式的([
是json中的一个显式数组)。PHP允许您向json_decode()
传递一个参数,该参数将强制它使用关联数组,而不是stdClass
对象。当运行var dump时,我实际上得到一个NULL。当在没有json decode的结果上运行vardump时,我得到一个字符串(0)”
$response = '{"success":true...}'
$json = json_decode($response); //var_dumping this will show you it's an object
echo $json->result->token; // 000000000
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);