PHP Velho Oeste 2024

Constante predefinite

Constantele de mai jos sunt definite de această extensie și vor fi disponibile doar dacă această extensie a fost compilată în interiorul PHP, sau a fost încărcată dinamic în timpul rulării.

Următoarele constante indică tipul erorii întoarse de funcția json_last_error() sau stocate în atributul code al obiectului JsonException.

JSON_ERROR_NONE (int)
Nu s-a produs vre-o eroare. Disponibilă începând cu PHP 5.3.0.
JSON_ERROR_DEPTH (int)
A fost depășită adâncimea maximă a stivei. Disponibilă începând cu PHP 5.3.0.
JSON_ERROR_STATE_MISMATCH (int)
Are loc în cazul unei valori ce depășește limita de jos, sau când modurile nu coincid. Disponibilă începând cu PHP 5.3.0.
JSON_ERROR_CTRL_CHAR (int)
Eroare în caracterul de control, posibil a fost codificat greșit. Disponibilă începând cu PHP 5.3.0.
JSON_ERROR_SYNTAX (int)
Eroare în sintaxă. Disponibilă începând cu PHP 5.3.0.
JSON_ERROR_UTF8 (int)
Caractere UTF-8 eronate, posibil codificate incorect. Disponibilă începând cu PHP 5.3.3.
JSON_ERROR_RECURSION (int)
Obiectul sau tabloul transmis funcției json_encode() include referințe recursive și de aceea nu pot fi codificate. Dacă a fost indicată opțiunea JSON_PARTIAL_OUTPUT_ON_ERROR, în locul referințelor recursive va fi codificat null. Disponibilă începând cu PHP 5.5.0.
JSON_ERROR_INF_OR_NAN (int)
Valoarea transmisă funcției json_encode() include NAN sau INF. Dacă a fost indicată opțiunea JSON_PARTIAL_OUTPUT_ON_ERROR, în locul acestor numere speciale va fi codificat 0. Disponibilă începând cu PHP 5.5.0.
JSON_ERROR_UNSUPPORTED_TYPE (int)
O valoare de tip nesusținut a fost transmisă funcției json_encode(), cum ar fi o resource. Dacă a fost indicată opțiunea JSON_PARTIAL_OUTPUT_ON_ERROR, în locul valorii nesusținute va fi codificat null. Disponibilă începând cu PHP 5.5.0.
JSON_ERROR_INVALID_PROPERTY_NAME (int)
În șirul de caractere transmis funcției json_decode() a fost găsită o cheie ce începe cu caracterul \u0000, la decodificarea unui obiect JSON într-un obiect PHP. Disponibilă începând cu PHP 7.0.0.
JSON_ERROR_UTF16 (int)
În șirul JSON transmis către json_decode() a fost găsit un surogat UTF-16 singur, fără pereche. Disponibilă începând cu PHP 7.0.0.

Următoarele constante pot fi combinate pentru a forma opțiuni pentru json_decode().

JSON_BIGINT_AS_STRING (int)
Decodifică numere întregi mari ca șiruri de caractere cu valoarea lor originală. Disponibilă începând cu PHP 5.4.0.
JSON_OBJECT_AS_ARRAY (int)
Decodifică obiecte JSON ca tablouri PHP. Această opțiune poate fi adăugată automat apelând json_decode() cu al doilea parametru egal cu true. Disponibilă începând cu PHP 5.4.0.

Următoarele constante pot fi combinate pentru a forma opțiuni pentru json_encode().

JSON_HEX_TAG (int)
Toate < și > sunt convertite în \u003C și \u003E. Disponibilă începând cu PHP 5.3.0.
JSON_HEX_AMP (int)
Toate & sunt convertite în \u0026. Disponibilă începând cu PHP 5.3.0.
JSON_HEX_APOS (int)
Toate ' sunt convertite în \u0027. Disponibilă începând cu PHP 5.3.0.
JSON_HEX_QUOT (int)
Toate " sunt convertite în \u0022. Disponibilă începând cu PHP 5.3.0.
JSON_FORCE_OBJECT (int)
Întoarce un obiect în loc de tablou când este utilizat un tablou non-associativ. Util în special când receptorul rezultatului se așteaptă la un obiect, iar tabloul este vid. Disponibilă începând cu PHP 5.3.0.
JSON_NUMERIC_CHECK (int)
Codifică șiruri numerice ca numere. Disponibilă începând cu PHP 5.3.3.
JSON_PRETTY_PRINT (int)
Folosește spații în datele întoarse pentru a le formata. Disponibilă începând cu PHP 5.4.0.
JSON_UNESCAPED_SLASHES (int)
Nu evadează caracterele /. Disponibilă începând cu PHP 5.4.0.
JSON_UNESCAPED_UNICODE (int)
Codifică caracterele Unicode pe mai mulți baiți așa cum sunt (implicit se efectuează evadarea de tip \uXXXX). Disponibilă începând cu PHP 5.4.0.
JSON_PARTIAL_OUTPUT_ON_ERROR (int)
Substituie unele valori ce nu pot fi codificate, în loc să eșueze. Disponibilă începând cu PHP 5.5.0.
JSON_PRESERVE_ZERO_FRACTION (int)
Asigură ca valorile float să fie întotdeauna codificate ca valori float. Disponibilă începând cu PHP 5.6.6.
JSON_UNESCAPED_LINE_TERMINATORS (int)
Sfârșiturile liniilor sunt păstrate fără schimbare atunci când este indicată JSON_UNESCAPED_UNICODE. Ea are același comportament ca și până la versiunea PHP 7.1 fără această constantă. Disponibilă începând cu PHP 7.1.0.

Următoarele constante pot fi combinate pentru a forma opțiuni pentru json_decode() și json_encode().

JSON_INVALID_UTF8_IGNORE (int)
Ignorează caracterele UTF-8 nevalide. Disponibilă începând cu PHP 7.2.0.
JSON_INVALID_UTF8_SUBSTITUTE (int)
Convertește caracterele UTF-8 nevalide în \0xfffd (Caracterul Unicode 'REPLACEMENT CHARACTER') Disponibil începând cu PHP 7.2.0.
JSON_THROW_ON_ERROR (int)
Emite JsonException dacă are loc o eroare în loc să seteze starea de eroare globală care este obținută cu json_last_error() și json_last_error_msg(). JSON_PARTIAL_OUTPUT_ON_ERROR are precedență față de JSON_THROW_ON_ERROR. Disponibilă începând cu PHP 7.3.0.
add a note add a note

User Contributed Notes 7 notes

up
79
majid4466 at gmail dot com
7 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
10
nikospapoutsis
1 year ago
Be EXTREMELY cautious when using the code majid4466 at gmail dot com provided, or JSON_NUMERIC_CHECK in general.

For example, in php 7.4 and 8.1 with precision: 14 and serialize_precision: -1 we get:

<?php
$array
= ['€', 55.6666666666666666, 'http://example.com/some/cool/page', '000337', '55.6666666666666666'];
echo
$case1 = json_encode($array);
echo
$case2 = json_encode($arrayJSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES );
echo
$case3 = json_encode($arrayJSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

[
"\u20ac",55.666666666666664,"http:\/\/example.com\/some\/cool\/page","000337","55.6666666666666666"]
// in $case1, both euro sign and the url change but we also lost a digit in our unquoted float (due to precision)

["€",55.666666666666664,"http://example.com/some/cool/page","000337","55.6666666666666666"]
// in $case2, both euro sign and the url stay exactly the same but we still lost a digit in our unquoted float (due to precision)

["€",55.666666666666664,"http://example.com/some/cool/page",337,55.666666666666664]
// in $case3, we once again keep euro sign and the url intact but this time not only our unquoted float lost a digit
// but the same happened to our quoted float and the number/string lost its leading zeros too

Also, note that in php 5.x you will probably get some different but equally wrong results as default values may be different and some functions have changed internally as well.
up
63
Yzmir Ramirez
9 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
10
ASchmidt at Anamera dot net
5 years 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
0
JuanP
8 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
-3
Anonymous
5 years 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
-28
on5wis at mac dot com
8 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
To Top