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

 

 

Komentáře

Vaše reakce na PHP JSON - json_decode vrací 1 místo pole

Související obsah

programovani

php

json

Reference

Podívejte se na naše reference

Prohlédnout

Aplikace

Podívejte se na naše aplikace

Prohlédnout

Co umíme?

Podívejte se co umíme

Prohlédnout

Co umíme?

Vytváříme sofistikované aplikace pro náročné

Od webových aplikací přes android až po převodové můstky či složité informační systémy.

Podívejte se k nám

Máte ještě čas? Podívejte se na další rubriky

Tento web používá soubory cookie. Dalším procházením tohoto webu vyjadřujete souhlas s jejich používáním.. Více informací zde.