recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment comprendre les caractères d'échappement dans JSON.parse()?

. . . Quelqu'un m'a posé cette question. . Je ne suis pas très clair non plus

JSON.parse(`{
    "test": "这是一个对象, 里面有 test 字段"
}`)

Ce qui précède peut fonctionner normalement. . Le résultat est {test: "这是一个对象, 里面有 test 字段"}


Mais si test 字段里面加上 双引号 il y a un problème très étrange...

JSON.parse(`{
    "test": "这是一个对象, 里面有 "test" 字段"
}`)

Ce qui précède signalera une erreur. C'est normal.

Inscrivez-vous maintenant转义符

JSON.parse(`{
    "test": "这是一个对象, 里面有 \"test\" 字段"
}`)

Le résultat est toujours une erreur, même si je saisis cette chaîne directement, la chaîne échappée peut être affichée normalement, comme le montre l'image :


Ce qui est étonnant, c'est que. . J'ai accidentellement écrit du code comme celui-ci, en utilisant \ 作为转义符而不是 . . . Le résultat est normal.


Mais pourquoi ?

世界只因有你世界只因有你2794 Il y a quelques jours627

répondre à tous(1)je répondrai

  • 学习ing

    学习ing2017-06-14 10:53:54

    Cela devrait être dû au fait que le processus d'exécution de JSON.parse subit en fait deux échappements.

    Once est l'évasion de la chaîne elle-même :

    '{"test": "这是一个对象, 里面有 \"test\" 字段"}'

    est converti en

    '{"test": "这是一个对象, 里面有 \"test\" 字段"}'

    (Vous pouvez saisir cette chaîne directement sur la ligne de commande du navigateur)

    Une fois l'échappement lors de la conversion d'une chaîne en objet :

    Parce qu'il a été converti en

    '{"test": "这是一个对象, 里面有 \"test\" 字段"}'

    "" sera considéré comme le caractère d'échappement de """ et sera correctement converti en objet.

    Lorsqu'il n'y a qu'un seul "", lorsque la chaîne est convertie en objet, il y a deux paires de guillemets doubles dans la valeur du champ de test et une erreur sera signalée.

    J'ai vérifié à nouveau la méthode d'analyse dans la spécification ES5 :

    La première étape devrait être d'échapper à la chaîne correspondante elle-même

    La deuxième étape correspond à l'échappement lors de la conversion d'une chaîne en objet

    répondre
    0
  • Annulerrépondre