PHP JSON - json_decode vrací 1 místo pole

PHP JSON - json_decode vrací 1 místo pole

Nedávno jsem v jedné PHP aplikaci postavené na Nette narazil na zajímavý problém s dekódování json do pole. Docele mě to zaseklo a bylo mi jasné, že to bude nějaká totální blbost.

 

Problém:

Response z php curl vrací json a když ho chci převést na pole pomocí json_decode, tak dump vypisuje místo pole jen číslo 1.

 

PHP kód

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $endpoint);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($dataForRequest));
$response = curl_exec($curl);
dump($response);


Dump vypíše:

[{"id":44858,.......}}]

 

Takže to vypadá ok, ale jakmile se dá

dump(json_decode($response));

 

Tak to nevypíše pole, ale (int/string) 1 .


Po dlouhém zkoumání jsem zjistil, že když se dá echo na response, tak se na konci objevuje znak 1 navíc, který dump() nezobrazuje, takže echo $response vypíše:

[{"id":44858,.......}}]1

 

Hned je tedy jasné, kde je problém - json je nevalidní, ale stále nevíme odkud se ten znak/číslo 1 bere...

Řešení

----------
Upravit php kód pro curl - přidat curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);


Finalní verze kódy tedy je:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $endpoint);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($dataForRequest));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

 

 

Jak se ti článek líbil?

Komentáře (0)

Přidat komentář