PHP and JSONP
Since PHP 5.2, with
json_decode
we have an easy way to decode JSON data. But sometimes, the
only data we can get is actually
JSONP, which is JSON data wrapped in
a function call like:
callback({/*.. JSON data .. */});
It is not difficult to use some string functions to remove this “overhead”. Here is an example
implementation of jsonp_decode
(which offers the same interface as json_decode
):
function jsonp_decode($jsonp, $assoc = false) { // PHP 5.3 adds "depth" as third parameter to json_decode
if($jsonp[0] !== '[' && $jsonp[0] !== '{') { // we have JSONP
$jsonp = substr($jsonp, strpos($jsonp, '('));
}
return json_decode(trim($jsonp,'();'), $assoc);
}
And example implementation for creating a JSONP string:
function jsonp_encode($value, $function_name = 'cb') { // 5.3 adds "options" as second parameter to json_encode
return sprintf(
'%s(%s);',
trim($function_name, '();'),
json_encode($value)
);
}
Update:
The code is now available on GitHub.