# json_encode

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

json_encode — Retourne la représentation JSON d'une valeur

### Description

json_encode(mixed `$value`, int `$flags` = 0, int `$depth` = 512): string|false

Retourne une chaîne de caractères contenant la représentation JSON de la valeur `value`. Si le paramètre est un tableau ou un objet, il sera sérialisé de manière récursive.

Si l'une des valeurs à sérialiser est un objet, alors par défaut seules les propriétés visibles publiquement seront incluses. Une classe peut également implémenter JsonSerializable pour contrôler la façon dont ses valeurs sont sérialisées en JSON.

L'encodage est affecté par les `flags` fournies. De plus, l'encodage des valeurs flottantes dépend de la valeur de serialize_precision.

### Liste de paramètres

`value`

  La valeur à encoder. Peut-être de n'importe quel type, excepté une resource.

  Toutes les chaînes doivent être encodées UTF-8.

  > Note:

  > PHP implémente un sur-ensemble de JSON tel que spécifié dans la » RFC 7159 originale.

`flags`

  Masque de bit compris de `JSON_FORCE_OBJECT`, `JSON_HEX_QUOT`, `JSON_HEX_TAG`, `JSON_HEX_AMP`, `JSON_HEX_APOS`, `JSON_INVALID_UTF8_IGNORE`, `JSON_INVALID_UTF8_SUBSTITUTE`, `JSON_NUMERIC_CHECK`, `JSON_PARTIAL_OUTPUT_ON_ERROR`, `JSON_PRESERVE_ZERO_FRACTION`, `JSON_PRETTY_PRINT`, `JSON_UNESCAPED_LINE_TERMINATORS`, `JSON_UNESCAPED_SLASHES`, `JSON_UNESCAPED_UNICODE`, `JSON_THROW_ON_ERROR`. Le comportement de ces constantes est décrit sur la page des constantes JSON.

`depth`

  Définit la profondeur maximale. Doit être supérieur à zéro.

### Valeurs de retour

Retourne un JSON encodé en tant que chaîne de caractères en cas de succès ou `false` si une erreur survient.

### Historique

Version | Description
--- | ---
7.3.0 | Le `flags` `JSON_THROW_ON_ERROR` a été ajoutée.
7.2.0 | Les `flags` `JSON_INVALID_UTF8_IGNORE`, et `JSON_INVALID_UTF8_SUBSTITUTE` ont été ajoutées.
7.1.0 | Le `flags` `JSON_UNESCAPED_LINE_TERMINATORS` a été ajoutée.
7.1.0 | serialize_precision est utilisé à la place de precision lors de l'encodage de valeurs float.

### Exemples

Exemple #1 Exemple avec json_encode()

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

L'exemple ci-dessus va afficher :

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

Exemple #2 Exemple avec json_encode() montrant quelques drapeaux en action

`<?php
$a = array('<foo>',"'bar'",'"baz"','&blong&', "\xc3\xa9");
echo "Normal : ", json_encode($a), "\n";
echo "Tags : ", json_encode($a, JSON_HEX_TAG), "\n";
echo "Apos : ", json_encode($a, JSON_HEX_APOS), "\n";
echo "Quot : ", json_encode($a, JSON_HEX_QUOT), "\n";
echo "Amp : ", json_encode($a, JSON_HEX_AMP), "\n";
echo "Unicode : ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "Toutes : ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";
$b = array();
echo "Tableau vide sous forme de tableau : ", json_encode($b), "\n";
echo "Tableau vide sous forme d'objet : ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";
$c = array(array(1,2,3));
echo "Tableau non-associatif sous forme de tableau : ", json_encode($c), "\n";
echo "Tableau non-associatif sous forme d'objet : ", json_encode($c, JSON_FORCE_OBJECT), "\n\n";
$d = array('foo' => 'bar', 'baz' => 'long');
echo "Tableau associatif affiché comme objet: ", json_encode($d), "\n";
echo "Tableau associatif affiché comme objet: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>`

L'exemple ci-dessus va afficher :

    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&","é"]
    Toutes : ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]

    Tableau vide sous forme de tableau : []
    Tableau vide sous forme d'objet : {}

    Tableau non-associatif sous forme de tableau : [[1,2,3]]
    Tableau non-associatif sous forme d'objet : {"0":{"0":1,"1":2,"2":3}}

    Tableau associatif affiché comme objet: {"foo":"bar","baz":"long"}
    Tableau associatif affiché comme objet: {"foo":"bar","baz":"long"}

Exemple #3 Exemple avec l'option JSON_NUMERIC_CHECK

`<?php
echo "Les chaînes représentant des nombres sont automatiquement converties en nombres".PHP_EOL;
$numbers = array('+123123', '-123123', '1.2e3', '0.00001');
var_dump(
$numbers,
json_encode($numbers, JSON_NUMERIC_CHECK)
);
echo "Chaînes contenant des nombres non formattés proprement".PHP_EOL;
$strings = array('+a33123456789', 'a123');
var_dump(
$strings,
json_encode($strings, JSON_NUMERIC_CHECK)
);
?>`

Résultat de l'exemple ci-dessus est similaire à :

    Les chaînes représentant des nombres sont automatiquement converties en nombres
    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]"
    Chaînes contenant des nombres non formattés proprement
    array(2) {
      [0]=>
      string(13) "+a33123456789"
      [1]=>
      string(4) "a123"
    }
    string(24) "["+a33123456789","a123"]"

Exemple #4 Exemple avec un tableau séquentiel et un tableau non-séquentiel

`<?php
echo "Tableau séquentiel".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode($sequential)
);
echo PHP_EOL."Tableau non-séquentiel".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);
echo PHP_EOL."Tableau séquentiel avec une clé supprimée".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>`

L'exemple ci-dessus va afficher :

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

    Tableau non-séquentiel
    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"}"

    Tableau séquentiel avec une clé supprimée
    array(3) {
      [0]=>
      string(3) "foo"
      [2]=>
      string(3) "baz"
      [3]=>
      string(5) "blong"
    }
    string(33) "{"0":"foo","2":"baz","3":"blong"}"

Exemple #5 Exemple avec l'option `JSON_PRESERVE_ZERO_FRACTION`

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

L'exemple ci-dessus va afficher :

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

### Notes

> Note:

> Lorsqu'une erreur survient lors de l'encodage, la fonction json_last_error() peut être utilisée pour déterminer la nature exacte de l'erreur.

> Note:

> Lors de l'encodage d'un tableau, si les clés ne sont pas sous la forme d'une séquence numérique continue commençant à 0, toutes les clés seront encodées sous forme de chaînes de caractères, et spécifiées explicitement pour chaque paire clé-valeur.

> Note:

> Tout comme l'encodeur JSON de référence, la fonction json_encode() génèrera un JSON qui est une valeur simple (ni un objet, ni un tableau) si une chaîne de caractères, un entier, un nombre décimal, ou un booléen est fourni en entrée pour le paramètre `value`. Bien que certains décodeurs acceptent ces valeurs comme JSON valide, d'autres ne les acceptent pas, sachant que la spécification est ambiguë sur ce point.

> Pour résumer, testez toujours que votre décodeur JSON peut gérer la sortie que vous générez depuis la fonction json_encode().

### Voir aussi

- JsonSerializable
- json_decode() - Décode une chaîne JSON
- json_last_error() - Retourne la dernière erreur JSON
- json_last_error_msg() - Retourne le message de la dernière erreur survenue lors de l'appel à la fonction json_validate(), json_encode() ou json_decode()
- serialize() - Génère une représentation stockable d'une valeur