270 votes

Comment échapper aux caractères spéciaux lors de la construction d'une chaîne JSON ?

Voici ma chaîne de caractères

{
    'user': {
        'name': 'abc',
        'fx': {
            'message': {
                'color': 'red'
            },
            'user': {
                'color': 'blue'
            }
        }
    },
    'timestamp': '2013-10-04T08: 10: 41+0100',
    'message': 'I'mABC..',
    'nanotime': '19993363098581330'
}    

Ici, le message contient des guillemets simples, identiques aux guillemets utilisés dans JSON. Ce que je fais, c'est remplir une chaîne de caractères à partir des entrées de l'utilisateur telles que le message. J'ai donc besoin d'échapper à ce genre de scénarios spéciaux qui cassent le code. Mais à part le remplacement de la chaîne, existe-t-il un moyen de les faire échapper tout en permettant au HTML de les traiter pour les ramener au message correct ?

0voto

Eamonn Kenny Points 11

Je me débattais avec cela pour des mélanges compliqués de chaînes, de listes et de dictionnaires enveloppés dans du JSON.

La réponse est simple : ne faites rien ! Utiliser :

 json.dumps( item, indent=4 )

où item est par exemple un dictionnaire de dictionnaires de chaînes de caractères et de listes, et qui se chargera lui-même de tout éditer pour vous. Il en résultera également une jolie sortie imprimée lisible par l'homme.

Exemple d'une partie d'un dictionnaire de dictionnaires contenant des listes avec le caractère spécial barre oblique :

        {
            "MEASUREMENT": [
                "1\u20444 cup"
            ],
            "DESCRIPTION": [
                "dried"
            ],
            "INGREDIENT": [
                "cranberries"
            ]
        },

Il fait ce qu'il faut pour \n en le remplaçant par \\n et ainsi de suite. Vous ne voulez pas échapper les chaînes qui n'en ont pas besoin, alors laissez les dumps le faire pour vous.

-1voto

Luigi D'Amico Points 137

La réponse à la question directe :
Pour plus de sécurité, remplacez le caractère requis par \u +4-digit-hex-value

Exemple : Si vous voulez échapper à l'apostrophe ', remplacez par \u0027
D'Amico devient D \u0027Amico

BELLE RÉFÉRENCE : http://es5.github.io/x7.html#x7.8.4

https://mathiasbynens.be/notes/javascript-escapes

-2voto

Ruben Points 217

Utilisation de modèles littéraux...

var json = `{"1440167924916":{"id":1440167924916,"type":"text","content":"It's a test!"}}`;

-4voto

Utilisation encodeURIComponent() pour encoder la chaîne.

Eg :

var product_list = encodeURIComponent(JSON.stringify(product_list));

Vous n'avez pas besoin de le décoder puisque le serveur web le fait automatiquement.

-7voto

4T2G Points 53

Pour autoriser les guillemets simples à l'intérieur d'une chaîne de caractères doublement citée pour les besoins de json, il faut doubler les guillemets simples. {"X" : "Quelle est la question"} ==> {"X" : "Quelle est la question"}

https://codereview.stackexchange.com/questions/69266/json-conversion-to-single-quotes

La séquence '\' n'est pas valide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X