json_encode

(PHP 5 >= 5.2.0, PHP 7, PECL json >= 1.2.0)

json_encodeÎntoarce o reprezentare JSON pentru valoarea dată

Descrierea

json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] ) : string

Întoarce un șir care conține o reprezentare JSON pentru valoarea (value) dată.

Parametri

value

Valoarea (value) care trebuie reprezentată JSON. Poate fi de orice tip cu excepția resource.

Toate șirurile cu date trebuie să fie codificate în UTF-8.

Notă:

PHP implementează un superset al JSON, după cum este specificat în documentul » RFC 4627 original; de asemenea el va codifica și va decodifica tipuri scalare și NULL. RFC 4627 susține aceste valori doar atunci când ele sunt încorporate într-un tablou sau obiect.

Cu toate că acest superset este consecvent cu definiția extinsă de "text JSON" din noul » RFC 7159 (care are ca scop să înlocuiască RFC 4627) și ECMA-404, aceasta poate cauza probleme de interoperabilitate cu interpretorii JSON mai vechi care aderă strict la RFC 4627 la codificarea unei singure valori scalare.

options

O mască de biți, ce constă din JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR. Comportamentul acestor constante este descris în pagina cu constante JSON.

depth

Stabilește adâncimea maximă. Trebuie să fie mai mare decât zero.

Valorile întoarse

Întoarce un șir (string) reprezentat JSON în caz de succes, sau FALSE în cazul eșecului.

Istoricul schimbărilor

Versiune Descriere
5.6.6 option JSON_PRESERVE_ZERO_FRACTION a fost adăugată.
5.5.0 A fost adăugat parametrul depth.
5.4.0 Au fost adăugate constantele JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE pentru parametrul options.
5.3.3 A fost adăugată constanta JSON_NUMERIC_CHECK pentru parametrul option.
5.3.0 A fost adăugat parametrul options.

Exemple

Example #1 Un exemplu json_encode()

<?php
$arr 
= array('a' => 1'b' => 2'c' => 3'd' => 4'e' => 5);

echo 
json_encode($arr);
?>

Exemplul de mai sus va afișa:

{"a":1,"b":2,"c":3,"d":4,"e":5}

Example #2 Un exemplu json_encode() ce demonstrează utilizarea opțiunilor

<?php
$a 
= array('<foo>',"'bar'",'"baz"','&blong&'"\xc3\xa9");

echo 
"Normal: ",  json_encode($a), "\n";
echo 
"Tags: ",    json_encode($aJSON_HEX_TAG), "\n";
echo 
"Apos: ",    json_encode($aJSON_HEX_APOS), "\n";
echo 
"Quot: ",    json_encode($aJSON_HEX_QUOT), "\n";
echo 
"Amp: ",     json_encode($aJSON_HEX_AMP), "\n";
echo 
"Unicode: "json_encode($aJSON_UNESCAPED_UNICODE), "\n";
echo 
"All: ",     json_encode($aJSON_HEX_TAG JSON_HEX_APOS JSON_HEX_QUOT JSON_HEX_AMP JSON_UNESCAPED_UNICODE), "\n\n";

$b = array();

echo 
"Empty array output as array: "json_encode($b), "\n";
echo 
"Empty array output as object: "json_encode($bJSON_FORCE_OBJECT), "\n\n";

$c = array(array(1,2,3));

echo 
"Non-associative array output as array: "json_encode($c), "\n";
echo 
"Non-associative array output as object: "json_encode($cJSON_FORCE_OBJECT), "\n\n";

$d = array('foo' => 'bar''baz' => 'long');

echo 
"Associative array always output as object: "json_encode($d), "\n";
echo 
"Associative array always output as object: "json_encode($dJSON_FORCE_OBJECT), "\n\n";
?>

Exemplul de mai sus va afișa:

Normal: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"]
Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"]
Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"]
Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"]
Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"]
All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]

Empty array output as array: []
Empty array output as object: {}

Non-associative array output as array: [[1,2,3]]
Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}}

Associative array always output as object: {"foo":"bar","baz":"long"}
Associative array always output as object: {"foo":"bar","baz":"long"}

Example #3 Exemplu a opțiunii JSON_NUMERIC_CHECK

<?php
echo "Strings representing numbers automatically turned into numbers".PHP_EOL;
$numbers = array('+123123''-123123''1.2e3''0.00001');
var_dump(
 
$numbers,
 
json_encode($numbersJSON_NUMERIC_CHECK)
);
echo 
"Strings containing improperly formatted numbers".PHP_EOL;
$strings = array('+a33123456789''a123');
var_dump(
 
$strings,
 
json_encode($stringsJSON_NUMERIC_CHECK)
);
?>

Exemplul de mai sus va afișa:

Strings representing numbers automatically turned into numbers
array(4) {
  [0]=>
  string(7) "+123123"
  [1]=>
  string(7) "-123123"
  [2]=>
  string(5) "1.2e3"
  [3]=>
  string(7) "0.00001"
}
string(28) "[123123,-123123,1200,1.0e-5]"
Strings containing improperly formatted numbers
array(2) {
  [0]=>
  string(13) "+a33123456789"
  [1]=>
  string(4) "a123"
}
string(24) "["+a33123456789","a123"]"

Example #4 Un exemplu cu tablou secvențial versus un tablou non-secvențial

<?php
echo "Sequential array".PHP_EOL;
$sequential = array("foo""bar""baz""blong");
var_dump(
 
$sequential,
 
json_encode($sequential)
);

echo 
PHP_EOL."Non-sequential array".PHP_EOL;
$nonsequential = array(1=>"foo"2=>"bar"3=>"baz"4=>"blong");
var_dump(
 
$nonsequential,
 
json_encode($nonsequential)
);

echo 
PHP_EOL."Sequential array with one key unset".PHP_EOL;
unset(
$sequential[1]);
var_dump(
 
$sequential,
 
json_encode($sequential)
);
?>

Exemplul de mai sus va afișa:

Sequential array
array(4) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(3) "baz"
  [3]=>
  string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"

Non-sequential array
array(4) {
  [1]=>
  string(3) "foo"
  [2]=>
  string(3) "bar"
  [3]=>
  string(3) "baz"
  [4]=>
  string(5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"

Sequential array with one key unset
array(3) {
  [0]=>
  string(3) "foo"
  [2]=>
  string(3) "baz"
  [3]=>
  string(5) "blong"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"

Example #5 Exemplu cu opțiunea JSON_PRESERVE_ZERO_FRACTION

<?php
var_dump
(json_encode(12.0JSON_PRESERVE_ZERO_FRACTION));
var_dump(json_encode(12.0));
?>

Exemplul de mai sus va afișa:

string(4) "12.0"
string(2) "12"

Note

Notă:

În caz dacă eșuează codificarea, json_last_error() poate fi utilizat pentru a determina natura exactă a erorii.

Notă:

La codificarea tablourilor, dacă cheile nu sunt consecutivități numerice începând cu 0, atunci toate cheile vor fi codificate ca șiruri de caractere, și vor fi specificate explicit pentru fiecare pereche cheie-valoare.

Notă:

Ca și codificatorul JSON de referință, json_encode() va genera JSON care este o valoare simplă (adică nu este obiect sau tablou) dacă îi este furnizată o valoare de tip string, integer, float sau boolean pentru parametrul value. În timp ce majoritatea decodificatorilor JSON vor accepta aceste valori ca fiind JSON valid, altele pot să nu-l accepte, deoarece specificația este ambiguă în această privință.

În concluzie, întotdeauna verificați ca decodificatorul JSON să poată prelucra ceea ce se obține cu json_encode().

A se vedea și