. . . 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.
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 :
est converti en
(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
"" 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