parent root
PHP: Predefined Constants - Manual
PHP 7.2.23 Release Announcement

Predefined Constants

The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.

The following constants indicate the type of error returned by json_last_error() or stored as the code of a JsonException.

JSON_ERROR_NONE (integer)
No error has occurred. Available as of PHP 5.3.0.
JSON_ERROR_DEPTH (integer)
The maximum stack depth has been exceeded. Available as of PHP 5.3.0.
JSON_ERROR_STATE_MISMATCH (integer)
Occurs with underflow or with the modes mismatch. Available as of PHP 5.3.0.
JSON_ERROR_CTRL_CHAR (integer)
Control character error, possibly incorrectly encoded. Available as of PHP 5.3.0.
JSON_ERROR_SYNTAX (integer)
Syntax error. Available as of PHP 5.3.0.
JSON_ERROR_UTF8 (integer)
Malformed UTF-8 characters, possibly incorrectly encoded. Available as of PHP 5.3.3.
JSON_ERROR_RECURSION (integer)
The object or array passed to json_encode() include recursive references and cannot be encoded. If the JSON_PARTIAL_OUTPUT_ON_ERROR option was given, NULL will be encoded in the place of the recursive reference. Available as of PHP 5.5.0.
JSON_ERROR_INF_OR_NAN (integer)
The value passed to json_encode() includes either NAN or INF. If the JSON_PARTIAL_OUTPUT_ON_ERROR option was given, 0 will be encoded in the place of these special numbers. Available as of PHP 5.5.0.
JSON_ERROR_UNSUPPORTED_TYPE (integer)
A value of an unsupported type was given to json_encode(), such as a resource. If the JSON_PARTIAL_OUTPUT_ON_ERROR option was given, NULL will be encoded in the place of the unsupported value. Available as of PHP 5.5.0.
JSON_ERROR_INVALID_PROPERTY_NAME (integer)
A key starting with \u0000 character was in the string passed to json_decode() when decoding a JSON object into a PHP object. Available as of PHP 7.0.0.
JSON_ERROR_UTF16 (integer)
Single unpaired UTF-16 surrogate in unicode escape contained in the JSON string passed to json_encode(). Available as of PHP 7.0.0.

The following constants can be combined to form options for json_decode().

JSON_BIGINT_AS_STRING (integer)
Decodes large integers as their original string value. Available as of PHP 5.4.0.
JSON_OBJECT_AS_ARRAY (integer)
Decodes JSON objects as PHP array. This option can be added automatically by calling json_decode() with the second parameter equal to TRUE. Available as of PHP 5.4.0.

The following constants can be combined to form options for json_encode().

JSON_HEX_TAG (integer)
All < and > are converted to \u003C and \u003E. Available as of PHP 5.3.0.
JSON_HEX_AMP (integer)
All & are converted to \u0026. Available as of PHP 5.3.0.
JSON_HEX_APOS (integer)
All ' are converted to \u0027. Available as of PHP 5.3.0.
JSON_HEX_QUOT (integer)
All " are converted to \u0022. Available as of PHP 5.3.0.
JSON_FORCE_OBJECT (integer)
Outputs an object rather than an array when a non-associative array is used. Especially useful when the recipient of the output is expecting an object and the array is empty. Available as of PHP 5.3.0.
JSON_NUMERIC_CHECK (integer)
Encodes numeric strings as numbers. Available as of PHP 5.3.3.
JSON_PRETTY_PRINT (integer)
Use whitespace in returned data to format it. Available as of PHP 5.4.0.
JSON_UNESCAPED_SLASHES (integer)
Don't escape /. Available as of PHP 5.4.0.
JSON_UNESCAPED_UNICODE (integer)
Encode multibyte Unicode characters literally (default is to escape as \uXXXX). Available as of PHP 5.4.0.
JSON_PARTIAL_OUTPUT_ON_ERROR (integer)
Substitute some unencodable values instead of failing. Available as of PHP 5.5.0.
JSON_PRESERVE_ZERO_FRACTION (integer)
Ensures that float values are always encoded as a float value. Available as of PHP 5.6.6.
JSON_UNESCAPED_LINE_TERMINATORS (integer)
The line terminators are kept unescaped when JSON_UNESCAPED_UNICODE is supplied. It uses the same behaviour as it was before PHP 7.1 without this constant. Available as of PHP 7.1.0.

The following constants can be combined to form options for json_decode() and json_encode().

JSON_INVALID_UTF8_IGNORE (integer)
Ignore invalid UTF-8 characters. Available as of PHP 7.2.0.
JSON_INVALID_UTF8_SUBSTITUTE (integer)
Convert invalid UTF-8 characters to \0xfffd (Unicode Character 'REPLACEMENT CHARACTER') Available as of PHP 7.2.0.
JSON_THROW_ON_ERROR (integer)
Throws JsonException if an error occurs instead of setting the global error state that is retrieved with json_last_error() and json_last_error_msg(). JSON_PARTIAL_OUTPUT_ON_ERROR takes precedence over JSON_THROW_ON_ERROR. Available as of PHP 7.3.0.
add a noteadd a note

User Contributed Notes 7 notes

up
45
majid4466 at gmail dot com
3 years ago
To get a really clean json string use these three constants like so:

<?php
$array
= ['€', 'http://example.com/some/cool/page', '337'];
$bad   = json_encode($array);
$good  = json_encode($arrayJSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

// $bad would be  ["\u20ac","http:\/\/example.com\/some\/cool\/page","337"]
// $good would be ["€","http://example.com/some/cool/page",337]
?>
up
58
Yzmir Ramirez
5 years ago
If you curious of the numeric values of the constants, as of JSON 1.2.1, the constants have the following values (not that you should use the numbers directly):

JSON_HEX_TAG => 1
JSON_HEX_AMP => 2
JSON_HEX_APOS => 4
JSON_HEX_QUOT => 8
JSON_FORCE_OBJECT => 16
JSON_NUMERIC_CHECK => 32
JSON_UNESCAPED_SLASHES => 64
JSON_PRETTY_PRINT => 128
JSON_UNESCAPED_UNICODE => 256

JSON_ERROR_DEPTH => 1
JSON_ERROR_STATE_MISMATCH => 2
JSON_ERROR_CTRL_CHAR => 3

JSON_ERROR_SYNTAX => 4

JSON_ERROR_UTF8 => 5
JSON_OBJECT_AS_ARRAY => 1

JSON_BIGINT_AS_STRING => 2
up
6
ASchmidt at Anamera dot net
1 year ago
In a multi-level array, JSON_FORCE_OBJECT will encode ALL nested numeric arrays as objects.

If your concern was ONLY the first-level array (e.g., to make it suitable as a MySQL JSON column), you could just cast your first-level array to object, e.g.:

<?php
$json
= json_encode( (object) $array, JSON_PRESERVE_ZERO_FRACTION+JSON_UNESCAPED_UNICODE );
?>

Or, if you have large arrays and are concerned about the overhead of object casting, you could append a "null" value beyond the size of the array, which will force the array to become associative:

<?php
$beyond
= count( $array ) + 1;
if ( !
array_key_exists( $beyond, $array) )
    
$array[ $beyond ] = NULL;
$json = json_encode( $array, JSON_PRESERVE_ZERO_FRACTION+JSON_UNESCAPED_UNICODE );
?>

Of course, your later code has to treat an element with a "NULL" value the same as "!isset()", if it iterates the array.
up
5
Anonymous
1 year ago
flags JSON_NUMERIC_CHECK and JSON_PRESERVE_ZERO_FRACTION are broken in php 7+ — json_encode((float)8.8) returns "8.8000000000000007", and json_encode((float)8.8, JSON_NUMERIC_CHECK) and json_encode((float)8.8, JSON_PRESERVE_ZERO_FRACTION) return "8.8000000000000007" too.

the only way to fix this is setting "serialize_precision = -1" in php.ini
up
4
JuanP
3 years ago
Updated format values list:

    JSON_HEX_TAG => 1
    JSON_HEX_AMP => 2
    JSON_HEX_APOS => 4
    JSON_HEX_QUOT => 8
    JSON_FORCE_OBJECT => 16
    JSON_NUMERIC_CHECK => 32
    JSON_UNESCAPED_SLASHES => 64
    JSON_PRETTY_PRINT => 128
    JSON_UNESCAPED_UNICODE => 256
    JSON_PARTIAL_OUTPUT_ON_ERROR => 512
    JSON_PRESERVE_ZERO_FRACTION => 1024
up
-22
on5wis at mac dot com
4 years ago
since json_encode expects a UTF-8 string there is no need to encode the € symbol.

I suggest you try to echo : json_encode('€');
It gives: "\u20ac"
I'm running PHP 5.6.5 on the CLI, on MacOS X 10.10
up
-37
Anonymous
4 years ago
I am working with "Marathi Language Data" and I found that when I encoded Marathi data to json using json_encode it returned me unicode values of each character like below:

Program :

<?php
$ar
= array("word" => "धाडस");
echo
json_encode($ar);
?>

Output of program is :

{"word":"\u0927\u093e\u0921\u0938"}

This is not expected output because what I need is output as

{"word":"धाडस"}

So I used following code:

<?php
$ar
= array("word" => "धाडस");
echo
json_encode($ar, JSON_UNESCAPED_UNICODE);
?>

And I got the required output as :

{"word":"धाडस"}
To Top
parent root