Bulgaria PHP Conference 2019

Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

Die folgenden Konstanten geben den Typ des Fehlers an, der von json_last_error() zurückgegeben, oder der als code einer JsonException gespeichert wurde.

JSON_ERROR_NONE (integer)
Kein Fehler aufgetreten. Verfügbar von PHP 5.3.0 an.
JSON_ERROR_DEPTH (integer)
Die maximale Stacktiefe wurde überschritten. Verfügbar von PHP 5.3.0 an.
JSON_ERROR_STATE_MISMATCH (integer)
Tritt ein bei Unterlauf oder State-Mismatch. Verfügbar von PHP 5.3.0 an.
JSON_ERROR_CTRL_CHAR (integer)
Steuerzeichenfehler, möglicherweise unkorrekt kodiert. Verfügbar von PHP 5.3.0 an.
JSON_ERROR_SYNTAX (integer)
Syntaxfehler. Verfügbar von PHP 5.3.0 an.
JSON_ERROR_UTF8 (integer)
Ungültige UTF-8 Zeichen, eventuall falsch kodiert. Verfügbar von PHP 5.3.3 an.
JSON_ERROR_RECURSION (integer)
Das an json_encode() übergebene Objekt oder Array enthält rekursive Referenzen und kann nicht kodiert werden. Wenn die JSON_PARTIAL_OUTPUT_ON_ERROR Option übergeben wurde, wird NULL an Stelle der rekursiven Referenz kodiert. Verfügbar von PHP 5.5.0 an.
JSON_ERROR_INF_OR_NAN (integer)
Der an json_encode() übergebene Wert enthält entweder NAN oder INF. Wenn die JSON_PARTIAL_OUTPUT_ON_ERROR Option übergeben wurde, wird 0 an Stelle dieser speziellen Zahlen kodiert. Verfügbar von PHP 5.5.0 an.
JSON_ERROR_UNSUPPORTED_TYPE (integer)
Der an json_encode() übergebene Wert enthält einen nicht unterstützten Typ, beispielweise Ressource. Wenn die JSON_PARTIAL_OUTPUT_ON_ERROR Option übergeben wurde, wird NULL an Stelle des nicht unterstützten Wertes kodiert. Verfügbar von PHP 5.5.0 an.
JSON_ERROR_INVALID_PROPERTY_NAME (integer)
Ein Schlüssel beginnend mit einem \u0000 Zeichen war in der Zeichenkette enthalten, die an json_decode() übergeben wurde, wenn ein JSON-Objekt in ein PHP-Objekt konvertiert werden sollte. Verfügbar von PHP 7.0.0 an.
JSON_ERROR_UTF16 (integer)
Ein einzelnes, alleinstehendes UTF-16-Surrogat war im JSON-String enthalten, der an json_decode() übergeben wurde. Verfügbar von PHP 7.0.0 an.

Die folgenden Konstanten können kombiniert (verodert) werden, um Optionen für json_decode() zu bilden.

JSON_BIGINT_AS_STRING (integer)
Dekodiert große Zahlen als ihre originale Zeichenkette. Verfügbar von PHP 5.4.0 an.
JSON_OBJECT_AS_ARRAY (integer)
Dekodiert JSON-Objekte als PHP-Arrays. Diese Option kann automatisch angefügt werden, indem json_decode() mit TRUE als zweitem Parameter aufgerufen wird. Verfügbar von PHP 5.4.0 an.

Die folgenden Konstanten können kombiniert (verodert) werden, um Optionen für json_encode() zu bilden.

JSON_HEX_TAG (integer)
Alle < und > werden zu \u003C und \u003E konvertiert. Verfügbar von PHP 5.3.0 an.
JSON_HEX_AMP (integer)
Alle &s werden zu \u0026 konvertiert. Verfügbar von PHP 5.3.0 an.
JSON_HEX_APOS (integer)
Alle ' werden zu \u0027 konvertiert. Verfügbar von PHP 5.3.0 an.
JSON_HEX_QUOT (integer)
Alle " werden zu \u0022 konvertiert. Verfügbar von PHP 5.3.0 an.
JSON_FORCE_OBJECT (integer)
Gibt ein Objekt statt einem Array aus, wenn ein nichtassoziatives Array verwendet wird. Besonders nützlich, wenn der Empfänger der Ausgabe ein Objekt erwartet und das Array leer ist. Verfügbar von PHP 5.3.0 an.
JSON_NUMERIC_CHECK (integer)
Kodiert numerische Zeichenketten als Zahlen. Verfügbar von PHP 5.3.3 an.
JSON_PRETTY_PRINT (integer)
Nutzt Whitespace um die zurückgegebenen Daten zu formatieren. Verfügbar von PHP 5.4.0 an.
JSON_UNESCAPED_SLASHES (integer)
Escape / nicht. Verfügbar von PHP 5.4.0 an.
JSON_UNESCAPED_UNICODE (integer)
Kodiere Unicode Zeichen, welche aus mehreren Bytes bestehen, direkt (standardmäßig werden \uXXXX Escapes genutzt). Verfügbar von PHP 5.4.0 an.
JSON_PARTIAL_OUTPUT_ON_ERROR (integer)
Ersetze einige unkodierbare Werte anstatt fehlzuschlagen. Verfügbar von PHP 5.5.0 an.
JSON_PRESERVE_ZERO_FRACTION (integer)
Stellt sicher, dass float Werte immer als Fließkomma-Werte kodiert werden. Verfügbar von PHP 5.6.6 an.
JSON_UNESCAPED_LINE_TERMINATORS (integer)
Die Zeilentrenner bleiben unmaskiert, wenn JSON_UNESCAPE_UNICODE übergeben wird. Das ist das gleiche Verhalten wie vor PHP 7.1 ohne diese Konstante. Verfügbar von PHP 7.1.0 an.

Die folgenden Konstanten können kombiniert (verodert) werden, um Optionen für json_decode() und json_encode() zu bilden.

JSON_INVALID_UTF8_IGNORE (integer)
Ignoriert ungültige UTF-8 Zeichen. Verfügbar von PHP 7.2.0 an.
JSON_INVALID_UTF8_SUBSTITUTE (integer)
Konvertiert ungültige UTF-8 Zeichen in \0xfffd (Unicode Zeichen 'REPLACEMENT CHARACTER') Verfügbar von PHP 7.2.0 an.
JSON_THROW_ON_ERROR (integer)
Wirft im Fehlerfall eine JsonException anstatt den globalen Fehlerstatus zu setzen, der mit json_last_error() und json_last_error_msg() abgerufen werden kann. JSON_PARTIAL_OUTPUT_ON_ERROR hat Vorrang vor JSON_THROW_ON_ERROR. Verfügbar von PHP 7.3.0 an.
add a note add a note

User Contributed Notes 7 notes

up
42
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
56
Yzmir Ramirez
4 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
4
Anonymous
11 months 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
5
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
-21
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
-36
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