2016-08-16 9 views
1

私はcurlリクエストを実行しており、jsonレスポンスを返すレスポンスを取得しています。以下は、応答が返送された後のコードです。このjsonレスポンスのプロパティにアクセスするには?

応答: "ゼロ置き換え本物トークン"

{"success":true,"result":{"token":"000000000","serverTime":1471365111,"expireTime":1471365411}}1 

(テスト用)に使用されるコードとアクセスプロパティ: $ JSON = json_decode($結果); print_r($ 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 

を印刷し、私は私が

json_encode($json); 

を行うかのように復帰応答がの終わりに1を置き換えることは最後に1を出力奇妙な異常を、気付きませんでした"真"の文字列 最後に "1または真"が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); 
+0

* "最後に1を出力する異常な異常がありました" * 'json_encode'から来ていない、*' json_encode'の後のものから来ています。 –

+0

JSONStringの最後にある '1'は無効なJSONString – RiggsFolly

+0

になりますので、応答の最後にrtimのようなものを使用すると仮定します。私はそれを試してみましょう。 – DEVPROCB

答えて

1

json_decode()は、stdClassオブジェクトではなく、配列に子オブジェクトを作成したよう。

$firsttry = $json->result->token; 
+0

デフォルトでは '' '' '' '[' ' – RiggsFolly

+0

ではなく、明示的に' ''は '' jsonの明示的な配列です。 PHPでは 'json_decode()'にパラメータを渡すことができ、 'stdClass'オブジェクトではなく連想配列を使用するよう強制します。 – GentlemanMax

0

のvar_dumpはあなたのデータの種類を示しています

のようなものを試してみてください。 result自体がオブジェクトであるので、->はなく[]

$response = '{"success":true...}' 
$json = json_decode($response); //var_dumping this will show you it's an object 
echo $json->result->token; // 000000000 
+0

var dumpを実行すると、実際にはNULLが返ってきます。 jsonデコードせずに結果にvardumpを実行すると、文字列(0)を取得する "" – DEVPROCB

0

とそのトークンにアクセスし、私はこの問題を考え出しました。私は@GentelmanMaxソリューションでこれを入れたらカール・オプションでは、私は

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

を持っていなかった私のために働いたが、問題は、リターン転送は、文字列が、php缶を送り返すように直接応答カール応答していましたこれで、json_decode()がそのまま動作するようになりました。私はそれが何か簡単だと分かっていました。

関連する問題