/ / JSON.parse sans échapper [dupliquer] - javascript, python, json

JSON.parse sans échapper [dupliquer] - javascript, python, json

Est-il possible de faire cela en JavaScript:

$ cat test.json
{"body":"u0000"}

$ python3 -c "import json; print(json.load(open("test.json", "r")))"
{"body": "x00"}

Avis, les données ci-dessus seulement un (n'a pas besoin d'être échappé). Donc, vous avez la situation suivante en JavaScript:

JSON.parse("{"body":"\u0000"}") // works
JSON.parse("{"body":"u0000"}") // does not work

Avec potentiellement toutes les données utf-8 provenant d'une source binaire (websocket), ces données peuvent-elles être traitées directement comme dans le premier exemple python ci-dessus?

Réponses:

0 pour la réponse № 1

Chaîne de caractères de u0000 par u001F sont considérés comme des caractères de contrôle, et selon RFC-7159 ne sont pas autorisés à utiliser des caractères dans JSON et doivent être échappés, comme indiqué dans la section 7.

Ce que vous essayez de faire est de mettre des caractères de contrôle non échappés dans un JSON, ce qui est clairement inacceptable, vous devez l’échapper d’abord, aucune des langues ne l’accepte, même Python.

La bonne réponse serait de placer une valeur encodée en utf-8 dans une chaîne contenant un format JSON.

Il s'agit d'un fichier JSON correct, qui sera analysé par tout analyseur JSON dans n'importe quelle langue, même en JavaScript:

{"body":"u0000"}

C'est Incorrect JSON (considérez le [NUL] en tant que caractère de contrôle NUL, car il ne peut pas être représenté dans le texte):

{"body":"[NUL]"}

C'est pourquoi JSON.parse("{"body":"\u0000"}") travaux et JSON.parse("{"body":"u0000"}") didn "t.

Espérons que cela clarifie ce qui ne va pas avec votre test.