# `json` --- JSON encoder and decoder

Code source : Lib/json/__init__.py

JSON (JavaScript Object Notation), specified by RFC 7159 (which obsoletes RFC 4627) and by ECMA-404, is a lightweight data interchange format inspired by JavaScript object literal syntax (although it is not a strict subset of JavaScript [1] ).

Note

The term "object" in the context of JSON processing in Python can be ambiguous. All values in Python are objects. In JSON, an object refers to any data wrapped in curly braces, similar to a Python dictionary.

Avertissement

Be cautious when parsing JSON data from untrusted sources. A malicious JSON string may cause the decoder to consume considerable CPU and memory resources. Limiting the size of data to be parsed is recommended.

This module exposes an API familiar to users of the standard library `marshal` and `pickle` modules.

Encodage de quelques objets de base Python :

    >>> import json
    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    >>> print(json.dumps("\"foo\bar"))
    "\"foo\bar"
    >>> print(json.dumps('\u1234'))
    "\u1234"
    >>> print(json.dumps('\\'))
    "\\"
    >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
    {"a": 0, "b": 0, "c": 0}
    >>> from io import StringIO
    >>> io = StringIO()
    >>> json.dump(['streaming API'], io)
    >>> io.getvalue()
    '["streaming API"]'

Encodage compact :

    >>> import json
    >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
    '[1,2,3,{"4":5,"6":7}]'

Affichage plus lisible :

    >>> import json
    >>> print(json.dumps({'6': 7, '4': 5}, sort_keys=True, indent=4))
    {
        "4": 5,
        "6": 7
    }

Customizing JSON object encoding:

    >>> import json
    >>> def custom_json(obj):
    ...     if isinstance(obj, complex):
    ...         return {'__complex__': True, 'real': obj.real, 'imag': obj.imag}
    ...     raise TypeError(f'Cannot serialize object of {type(obj)}')
    ...
    >>> json.dumps(1 + 2j, default=custom_json)
    '{"__complex__": true, "real": 1.0, "imag": 2.0}'

Décodage JSON :

    >>> import json
    >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
    ['foo', {'bar': ['baz', None, 1.0, 2]}]
    >>> json.loads('"\\"foo\\bar"')
    '"foo\x08ar'
    >>> from io import StringIO
    >>> io = StringIO('["streaming API"]')
    >>> json.load(io)
    ['streaming API']

Customizing JSON object decoding:

    >>> import json
    >>> def as_complex(dct):
    ...     if '__complex__' in dct:
    ...         return complex(dct['real'], dct['imag'])
    ...     return dct
    ...
    >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
    ...     object_hook=as_complex)
    (1+2j)
    >>> import decimal
    >>> json.loads('1.1', parse_float=decimal.Decimal)
    Decimal('1.1')

Extension de la classe `JSONEncoder` :

    >>> import json
    >>> class ComplexEncoder(json.JSONEncoder):
    ...     def default(self, obj):
    ...         if isinstance(obj, complex):
    ...             return [obj.real, obj.imag]
    ...         # Let the base class default method raise the TypeError
    ...         return super().default(obj)
    ...
    >>> json.dumps(2 + 1j, cls=ComplexEncoder)
    '[2.0, 1.0]'
    >>> ComplexEncoder().encode(2 + 1j)
    '[2.0, 1.0]'
    >>> list(ComplexEncoder().iterencode(2 + 1j))
    ['[2.0', ', 1.0', ']']

Using `json` from the shell to validate and pretty-print:

    $ echo '{"json":"obj"}' | python -m json
    {
        "json": "obj"
    }
    $ echo '{1.2:3.4}' | python -m json
    Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Voir Command-line interface pour une documentation détaillée.

Note

JSON is a subset of YAML 1.2. The JSON produced by this module's default settings (in particular, the default separators value) is also a subset of YAML 1.0 and 1.1. This module can thus also be used as a YAML serializer.

Note

Les encodeurs et décodeurs de ce module conservent l'ordre d'entrée et de sortie par défaut. L'ordre n'est perdu que si les conteneurs sous-jacents ne sont pas ordonnés.

## Utilisation de base

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

  Serialize obj as a JSON formatted stream to fp (a `.write()`-supporting file-like object) using this Python-to-JSON conversion table.

  Note

  À l'inverse de `pickle` et `marshal`, JSON n'est pas un protocole par trames, donc essayer de sérialiser plusieurs objets par des appels répétés à `dump()` en utilisant le même fp résulte en un fichier JSON invalide.

  Paramètres:

    - obj (object) -- The Python object to be serialized.

    - fp (file-like object) -- The file-like object obj will be serialized to. The `json` module always produces `str` objects, not `bytes` objects, therefore `fp.write()` must support `str` input.

    - skipkeys (bool) -- If `True`, keys that are not of a basic type (`str`, `int`, `float`, `bool`, `None`) will be skipped instead of raising a `TypeError`. Default `False`.

    - ensure_ascii (bool) -- If `True` (the default), the output is guaranteed to have all incoming non-ASCII and non-printable characters escaped. If `False`, all characters will be outputted as-is, except for the characters that must be escaped: quotation mark, reverse solidus, and the control characters U+0000 through U+001F.

    - check_circular (bool) -- If `False`, the circular reference check for container types is skipped and a circular reference will result in a `RecursionError` (or worse). Default `True`.

    - allow_nan (bool) -- If `False`, serialization of out-of-range `float` values (`nan`, `inf`, `-inf`) will result in a `ValueError`, in strict compliance with the JSON specification. If `True` (the default), their JavaScript equivalents (`NaN`, `Infinity`, `-Infinity`) are used.

    - cls (a `JSONEncoder` subclass) -- If set, a custom JSON encoder with the `default()` method overridden, for serializing into custom datatypes. If `None` (the default), `JSONEncoder` is used.

    - indent (int | str | None) -- If a positive integer or string, JSON array elements and object members will be pretty-printed with that indent level. A positive integer indents that many spaces per level; a string (such as `"\t"`) is used to indent each level. If zero, negative, or `""` (the empty string), only newlines are inserted. If `None` (the default), no newlines are inserted.

    - separators (tuple | None) -- A two-tuple: `(item_separator, key_separator)`. If `None` (the default), separators defaults to `(', ', ': ')` if indent is `None`, and `(',', ': ')` otherwise. For the most compact JSON, specify `(',', ':')` to eliminate whitespace.

    - default (callable | None) -- A function that is called for objects that can't otherwise be serialized. It should return a JSON encodable version of the object or raise a `TypeError`. If `None` (the default), `TypeError` is raised.

    - sort_keys (bool) -- If `True`, dictionaries will be outputted sorted by key. Default `False`.

  Modifié dans la version 3.2: Autorise les chaînes en plus des nombres entiers pour indent.

  Modifié dans la version 3.4: Utilise `(',', ': ')` par défaut si indent n'est pas `None`.

  Modifié dans la version 3.6: tous les paramètres optionnels sont maintenant des keyword-only.

json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

  Sérialise obj en une `str` formatée en JSON, en utilisant cette table de conversion. Les arguments ont la même signification que ceux de `dump()`.

  Note

  Les clés dans les couples JSON clé-valeur sont toujours de type `str`. Quand un dictionnaire est converti en JSON, toutes les clés du dictionnaire sont transformées en chaînes de caractères. Ce qui fait que si un dictionnaire est converti en JSON et reconverti en dictionnaire, le résultat peut ne pas être égal à l'original. Ainsi, `loads(dumps(x)) != x` si x contient des clés qui ne sont pas des chaînes.

json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, array_hook=None, **kw)

  Deserialize fp to a Python object using the JSON-to-Python conversion table.

  Paramètres:

    - fp (file-like object) -- A `.read()`-supporting text file or binary file containing the JSON document to be deserialized.

    - cls (a `JSONDecoder` subclass) -- If set, a custom JSON decoder. Additional keyword arguments to `load()` will be passed to the constructor of cls. If `None` (the default), `JSONDecoder` is used.

    - object_hook (callable | None) -- If set, a function that is called with the result of any JSON object literal decoded (a `dict`). The return value of this function will be used instead of the `dict`. This feature can be used to implement custom decoders, for example JSON-RPC class hinting. Default `None`.

    - object_pairs_hook (callable | None) -- If set, a function that is called with the result of any JSON object literal decoded with an ordered list of pairs. The return value of this function will be used instead of the `dict`. This feature can be used to implement custom decoders. If object_hook is also set, object_pairs_hook takes priority. Default `None`.

    - array_hook (callable | None) -- If set, a function that is called with the result of any JSON array literal decoded with as a Python list. The return value of this function will be used instead of the `list`. This feature can be used to implement custom decoders. Default `None`.

    - parse_float (callable | None) -- If set, a function that is called with the string of every JSON float to be decoded. If `None` (the default), it is equivalent to `float(num_str)`. This can be used to parse JSON floats into custom datatypes, for example `decimal.Decimal`.

    - parse_int (callable | None) -- If set, a function that is called with the string of every JSON int to be decoded. If `None` (the default), it is equivalent to `int(num_str)`. This can be used to parse JSON integers into custom datatypes, for example `float`.

    - parse_constant (callable | None) -- If set, a function that is called with one of the following strings: `'-Infinity'`, `'Infinity'`, or `'NaN'`. This can be used to raise an exception if invalid JSON numbers are encountered. Default `None`.

  Lève:

    - JSONDecodeError -- When the data being deserialized is not a valid JSON document.

    - UnicodeDecodeError -- When the data being deserialized does not contain UTF-8, UTF-16 or UTF-32 encoded data.

  Modifié dans la version 3.1:

  - Added the optional object_pairs_hook parameter.

  - parse_constant n'est plus appelée pour null, true ou false.

  Modifié dans la version 3.6:

  - tous les paramètres optionnels sont maintenant des keyword-only.

  - fp peut maintenant être un `binary file`. Son encodage doit être UTF-8, UTF-16 ou UTF-32.

  Modifié dans la version 3.11: The default parse_int of `int()` now limits the maximum length of the integer string via the interpreter's integer string conversion length limitation to help avoid denial of service attacks.

  Modifié dans la version 3.15: Added the optional array_hook parameter.

json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, array_hook=None, **kw)

  Identical to `load()`, but instead of a file-like object, deserialize s (a `str`, `bytes` or `bytearray` instance containing a JSON document) to a Python object using this conversion table.

  Modifié dans la version 3.6: s peut maintenant être de type `bytes` ou `bytearray`. L'encodage d'entrée doit être UTF-8, UTF-16 ou UTF-32.

  Modifié dans la version 3.9: suppression de l’argument nommé encoding.

## Encodeurs et décodeurs

class json.JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None, array_hook=None)

  Décodeur simple JSON.

  Applique par défaut les conversions suivantes en décodant :

  JSON | Python
  --- | ---
  objet | dict
  array | list
  string | str
  number (nombre entier) | int
  number (nombre réel) | float
  true | True
  false | False
  null | `None`

  Les valeurs `NaN`, `Infinity` et `-Infinity` sont aussi comprises comme leurs valeurs `float` correspondantes, bien que ne faisant pas partie de la spécification JSON.

  object_hook is an optional function that will be called with the result of every JSON object decoded and its return value will be used in place of the given `dict`. This can be used to provide custom deserializations (e.g. to support JSON-RPC class hinting).

  object_pairs_hook is an optional function that will be called with the result of every JSON object decoded with an ordered list of pairs. The return value of object_pairs_hook will be used instead of the `dict`. This feature can be used to implement custom decoders. If object_hook is also defined, the object_pairs_hook takes priority.

  Modifié dans la version 3.1: ajout du support de object_pairs_hook.

  array_hook is an optional function that will be called with the result of every JSON array decoded as a list. The return value of array_hook will be used instead of the `list`. This feature can be used to implement custom decoders.

  Modifié dans la version 3.15: Added support for array_hook.

  parse_float is an optional function that will be called with the string of every JSON float to be decoded. By default, this is equivalent to `float(num_str)`. This can be used to use another datatype or parser for JSON floats (e.g. `decimal.Decimal`).

  parse_int is an optional function that will be called with the string of every JSON int to be decoded. By default, this is equivalent to `int(num_str)`. This can be used to use another datatype or parser for JSON integers (e.g. `float`).

  parse_constant is an optional function that will be called with one of the following strings: `'-Infinity'`, `'Infinity'`, `'NaN'`. This can be used to raise an exception if invalid JSON numbers are encountered.

  Si strict vaut `False` (`True` par défaut), alors les caractères de contrôle sont autorisés à l'intérieur des chaînes. Les caractères de contrôle dans ce contexte sont ceux dont les codes sont dans l'intervalle 0--31, incluant `'\t'` (tabulation), `'\n'`, `'\r'` et `'\0'`.

  Si les données à désérialiser ne sont pas un document JSON valide, une `JSONDecodeError` est levée.

  Modifié dans la version 3.6: Tous les paramètres sont maintenant des keyword-only.

  decode(s)

    Renvoie la représentation Python de s (une instance `str` contenant un document JSON).

    Une `JSONDecodeError` est levée si le document JSON donné n'est pas valide.

  raw_decode(s)

    Décode en document JSON depuis s (une instance `str` débutant par un document JSON) et renvoie un n-uplet de 2 éléments contenant la représentation Python de l'objet et l'index dans s où le document se terminait.

    Elle peut être utilisée pour décoder un document JSON depuis une chaîne qui peut contenir des données supplémentaires à la fin.

class json.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

  Encodeur JSON extensible pour les structures de données Python.

  Prend en charge par défaut les objets et types suivants :

  Python | JSON
  --- | ---
  dict | objet
  list, tuple | array
  str | string
  int, float, et Enums dérivées d'int ou de float | number
  True | true
  False | false
  `None` | null

  Modifié dans la version 3.4: ajout de la prise en charge des classes Enum dérivées d'int ou de float.

  To extend this to recognize other objects, subclass and implement a `default()` method with another method that returns a serializable object for `o` if possible, otherwise it should call the superclass implementation (to raise `TypeError`).

  If skipkeys is false (the default), a `TypeError` will be raised when trying to encode keys that are not `str`, `int`, `float`, `bool` or `None`. If skipkeys is true, such items are simply skipped.

  If ensure_ascii is true (the default), the output is guaranteed to have all incoming non-ASCII and non-printable characters escaped. If ensure_ascii is false, all characters will be output as-is, except for the characters that must be escaped: quotation mark, reverse solidus, and the control characters U+0000 through U+001F.

  Si check_circular vaut `True` (valeur par défaut), une vérification a lieu sur les listes, dictionnaires et objets personnalisés, afin de détecter les références circulaires et éviter les récursions infinies (qui causeraient une `RecursionError`). Autrement, la vérification n'a pas lieu.

  Si allow_nan vaut `True` (valeur par défaut), alors `NaN`, `Infinity` et `-Infinity` sont encodés comme tels. Ce comportement ne respecte pas la spécification JSON, mais est cohérent avec le majorité des encodeurs-décodeurs JavaScript. Autrement, une `ValueError` est levée pour de telles valeurs.

  Si sort_keys vaut `True` (`False` par défaut), alors les dictionnaires sont triés par clés en sortie ; cela est utile lors de tests de régression pour pouvoir comparer les sérialisations JSON au jour le jour.

  Si indent est un nombre entier positif ou une chaîne de caractères, les éléments de tableaux et les membres d'objets JSON sont affichés élégamment avec ce niveau d'indentation. Un niveau d'indentation de 0, négatif, ou `""` n'insère que des retours à la ligne. `None` (la valeur par défaut) choisit la représentation la plus compacte. Utiliser un entier positif pour indent indente d'autant d'espaces par niveau. Si indent est une chaîne (telle que `"\t"`), cette chaîne est utilisée pour indenter à chaque niveau.

  Modifié dans la version 3.2: Autorise les chaînes en plus des nombres entiers pour indent.

  Si spécifié, separators doit être un n-uplet `(item_separator, key_separator)`. Sa valeur par défaut est `(', ', ': ')` si indent est `None`, et `(',', ': ')` autrement. Pour obtenir la représentation JSON la plus compacte possible, passez `(',', ':')` pour éliminer les espaces.

  Modifié dans la version 3.4: Utilise `(',', ': ')` par défaut si indent n'est pas `None`.

  Si spécifié, default doit être une fonction qui sera appelée pour les objets qui ne peuvent être sérialisés autrement. Elle doit renvoyer une représentation composée d'objets Python sérialisable en JSON ou lever une `TypeError`. Si non spécifié, une `TypeError` est levée.

  Modifié dans la version 3.6: Tous les paramètres sont maintenant des keyword-only.

  default(o)

    Implémentez cette méthode dans une sous-classe afin qu'elle renvoie un objet sérialisable pour o, ou appelle l'implémentation de base (qui lèvera une `TypeError`).

    For example, to support arbitrary iterators, you could implement `default()` like this:

        def default(self, o):
           try:
               iterable = iter(o)
           except TypeError:
               pass
           else:
               return list(iterable)
           # Let the base class default method raise the TypeError
           return super().default(o)

  encode(o)

    Renvoie une chaîne JSON représentant la structure de données Python o. Par exemple :

        >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
        '{"foo": ["bar", "baz"]}'

  iterencode(o)

    Encode l'objet o donné, et produit chaque chaîne représentant l'objet selon disponibilité. Par exemple :

        for chunk in json.JSONEncoder().iterencode(bigobject):
            mysocket.write(chunk)

## Exceptions

exception json.JSONDecodeError(msg, doc, pos)

  Sous-classe de `ValueError` avec les attributs additionnels suivants :

  msg

    Le message d'erreur non formaté.

  doc

    Le document JSON en cours de traitement.

  pos

    L'index de doc à partir duquel l'analyse a échoué.

  lineno

    La ligne correspondant à pos.

  colno

    La colonne correspondant à pos.

  Ajouté dans la version 3.5.

## Conformité au standard et Interopérabilité

The JSON format is specified by RFC 7159 and by ECMA-404. This section details this module's level of compliance with the RFC. For simplicity, `JSONEncoder` and `JSONDecoder` subclasses, and parameters other than those explicitly mentioned, are not considered.

Ce module ne se conforme pas strictement à la RFC, implémentant quelques extensions qui sont valides en JavaScript mais pas en JSON. En particulier :

- Les nombres infinis et NaN sont acceptés et retranscrits ;

- Les noms répétés au sein d'un objet sont acceptés, seule la valeur du dernier couple nom-valeur est utilisée.

Comme la RFC permet aux analyseurs conformes d'accepter en entrée des textes non conformes, le désérialiseur de ce module avec ses paramètres par défaut est techniquement conforme à la RFC.

### Encodage des caractères

La RFC requiert que le JSON soit représenté en utilisant l'encodage UTF-8, UTF-16 ou UTF-32, avec UTF-8 recommandé par défaut pour une interopérabilité maximale.

As permitted, though not required, by the RFC, this module's serializer sets ensure_ascii=True by default, thus escaping the output so that the resulting strings only contain printable ASCII characters.

Outre le paramètre ensure_ascii, les conversions entre objets Python et `chaînes Unicode` de ce module sont strictement définies, et ne résolvent donc pas directement le problème de l'encodage des caractères.

La RFC interdit d'ajouter un octet marqueur d'ordre (byte mark order ou BOM) au début du texte JSON, et le sérialiseur de ce module n'ajoute pas de tel BOM. La RFC permet, mais ne requiert pas, que les désérialiseurs JSON ignorent ces BOM. Le désérialiseur de ce module lève une `ValueError` quand un BOM est présent au début du fichier.

La RFC n'interdit pas explicitement les chaînes JSON contenant des séquences d'octets ne correspondant à aucun caractère Unicode valide (p. ex. les surrogates UTF-16 sans correspondance), mais précise que cela peut causer des problèmes d'interopérabilité. Par défaut, ce module accepte et retranscrit (quand présents dans la `str` originale) les code points de telles séquences.

### Valeurs numériques infinies et NaN

La RFC ne permet pas la représentation des nombres infinis ou des NaN. Néanmoins, par défaut, ce module accepte et retranscrit `Infinity`, `-Infinity` et `NaN` comme s'ils étaient des valeurs numériques littérales JSON valides :

    >>> # Neither of these calls raises an exception, but the results are not valid JSON
    >>> json.dumps(float('-inf'))
    '-Infinity'
    >>> json.dumps(float('nan'))
    'NaN'
    >>> # Same when deserializing
    >>> json.loads('-Infinity')
    -inf
    >>> json.loads('NaN')
    nan

Dans le sérialiseur, le paramètre allow_nan peut être utilisé pour altérer ce comportement. Dans le désérialiseur, le paramètre parse_constant peut être utilisé pour changer ce comportement.

### Noms répétés au sein d'un objet

La RFC précise que les noms au sein d'un objet JSON doivent être uniques, mais ne décrit pas comment les noms répétés doivent être gérés. Par défaut, ce module ne lève pas d'exception ; à la place, il ignore tous les couples nom-valeur sauf le dernier pour un nom donné :

    >>> weird_json = '{"x": 1, "x": 2, "x": 3}'
    >>> json.loads(weird_json)
    {'x': 3}

Le paramètre object_pairs_hook peut être utilisé pour modifier ce comportement.

### Valeurs de plus haut niveau (hors objets ou tableaux)

L'ancienne version de JSON définie par l'obsolète RFC 4627 demandait à ce que la valeur de plus haut niveau du texte JSON soit un objet ou un tableau JSON (`dict` ou `list` Python), et ne soit pas null, un nombre, ou une chaîne de caractères. La RFC 7159 a supprimé cette restriction, jamais implémentée par ce module, que ce soit dans le sérialiseur ou le désérialiseur.

Cependant, pour une interopérabilité maximale, vous pourriez volontairement souhaiter adhérer à cette restriction.

### Limitations de l'implémentation

Certaines implémentations de désérialiseurs JSON peuvent avoir des limites sur :

- la taille des textes JSON acceptés ;

- le niveau maximum d'objets et tableaux JSON imbriqués ;

- l'intervalle et la précision des nombres JSON ;

- le contenu et la longueur maximale des chaînes JSON.

Ce module n'impose pas de telles limites si ce n'est celles inhérentes aux types de données Python ou à l'interpréteur.

Lors d'une sérialisation JSON, faites attention à ces limitations dans les applications qui utilisent votre JSON. En particulier, il est courant pour les nombres JSON d'être désérialisés vers des nombres IEEE 754 à précision double, et donc sujets à l'intervalle et aux limitations sur la précision de cette représentation. Cela est d'autant plus important lors de la sérialisation de grands `int` Python, ou d'instances de types numériques « exotiques » comme `decimal.Decimal`.

## Command-line interface

Code source : Lib/json/tool.py

The `json` module can be invoked as a script via `python -m json` to validate and pretty-print JSON objects. The `json.tool` submodule implements this interface.

If the optional `infile` and `outfile` arguments are not specified, `sys.stdin` and `sys.stdout` will be used respectively:

    $ echo '{"json": "obj"}' | python -m json
    {
        "json": "obj"
    }
    $ echo '{1.2:3.4}' | python -m json
    Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Modifié dans la version 3.5: La sortie conserve maintenant l'ordre des données de l'entrée. Utilisez l'option `--sort-keys` pour sortir des dictionnaires triés alphabétiquement par clés.

Modifié dans la version 3.14: The `json` module may now be directly executed as `python -m json`. For backwards compatibility, invoking the CLI as `python -m json.tool` remains supported.

### Command-line options

infile

  Le fichier JSON à valider ou réécrire élégamment :

      $ python -m json mp_films.json
      [
          {
              "title": "And Now for Something Completely Different",
              "year": 1971
          },
          {
              "title": "Monty Python and the Holy Grail",
              "year": 1975
          }
      ]

  If infile is not specified, read from `sys.stdin`.

outfile

  Write the output of the infile to the given outfile. Otherwise, write it to `sys.stdout`.

--sort-keys

  Trie alphabétiquement les dictionnaires par clés.

  Ajouté dans la version 3.5.

--no-ensure-ascii

  Désactive l’échappement des caractères non ASCII, voir `json.dumps()` pour plus d'informations.

  Ajouté dans la version 3.9.

--json-lines

  Transforme chaque ligne d'entrée en un objet JSON individuel.

  Ajouté dans la version 3.8.

--indent, --tab, --no-indent, --compact

  Options mutuellement exclusives de contrôle des espaces.

  Ajouté dans la version 3.9.

-h, --help

  Affiche le message d'aide.

Notes

[1]

Comme noté dans l'errata de la RFC 7159, JSON autorise les caractères littéraux U+2028 (LINE SEPARATOR) et U+2029 (PARAGRAPH SEPARATOR) dans les chaînes de caractères, alors que Javascript (selon le standard ECMAScript édition 5.1) ne le permet pas.