Felix Kling

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.