Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何访问此json响应中的属性?_Php_Json_Rest_Response_Vtiger - Fatal编程技术网

Php 如何访问此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['

我正在执行一个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['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);