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);