A great thing about JSON is, among other things, it is very easy to edit by hand should you need to. The default options for json_encode()
don’t produce very readable results though.
I recommend adding the the following flags: JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT
when you call this function.
Although JSON only supports UTF-8 the default options encode special characters so it can be stored in non-UTF-8-encoded files; JSON_UNESCAPED_UNICODE
prevents this. Forward slashes are also escaped by default in case you wish to use the JSON within script tags (this is rare in my opinion); JSON_UNESCAPED_SLASHES
prevents this. Finally, JSON_PRETTY_PRINT
makes the JSON multiline and indented. Yes, it uses a few extra characters but should you ever need to edit the JSON PHP has generated you will be glad you used this flag.
Here is an example:
<pre><?php
$array['foo'] = 'I paid £100 for the computer/laptop';
echo json_encode($array) . PHP_EOL . PHP_EOL; // Default
echo json_encode($array, JSON_UNESCAPED_UNICODE) . PHP_EOL . PHP_EOL; // Notice the £ sign is shown as is
echo json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL . PHP_EOL; // Forward slashes are no longer escaped
echo json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); // Now it's multiline and indented properly
/**
Outputs:
{"foo":"I paid \u00a3100 for the computer\/laptop"}
{"foo":"I paid £100 for the computer\/laptop"}
{"foo":"I paid £100 for the computer/laptop"}
{
"foo": "I paid £100 for the computer/laptop"
}
*/
?></pre>
Note that I have avoided using JSON_NUMERIC_CHECK
because this can cause unexpected results if you have leading zeros on a number.