There is a strange behaviour with json_encode and json_decode and I can’t find a solution:
My php application calls a php web service. The webservice returns json that looks like this:
var_dump($foo): string(62) '{'action':'set','user':'123123123123','status':'OK'}'
now I like to decode the json in my application:
$data = json_decode($foo, true)
but it returns NULL:
var_dump($data): NULL
I use php5. The Content-Type of the response from the webservice: 'text/html; charset=utf-8' (also tried to use 'application/json; charset=utf-8')
What could be the reason?
EDIT: Just did some quick inspection of the string provided by the OP. The small ‘character’ in front of the curly brace is a UTF-8 B(yte) O(rder) M(ark)
0xEF 0xBB 0xBF. I don’t know why this byte sequence is displayed ashere.Essentially the system you aquire the data from sends it encoded in UTF-8 with a BOM preceding the data. You should remove the first three bytes from the string before you throw it into
json_decode()(asubstr($string, 3)will do).As Kuroki Kaze discovered, this character surely is the reason why
json_decodefails. The string in its given form is not correctly a JSON formated structure (see RFC 4627)