Синтаксическая ошибка при разборе простого JSON с кавычками? - PullRequest
2 голосов
/ 02 августа 2011

Я пытаюсь проанализировать Json, который содержит строку двойных кавычек в JavaScript, используя Json2.js, как показано ниже.

<script src="Scripts/json2.js" type="text/javascript"></script>
<script src="Scripts/jquery-1.4.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(function () {
        try {
            var inv = JSON.parse('{"Items":[{"Quantity":1,"Description":"Width : 16\" Asd","Price":49.17,"IsEditable":false}],"Vat":20.00,"Delivery":0}');
            console.log(inv.Vat);
        }
        catch (err) {
            console.log(err);
        }
    });

</script>

Но я получаю синтаксическую ошибку при разборе.Я что-то здесь упускаю?

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

Символ косой черты в "Width : 16\" рассматривается как экранирующий символ " в строке JavaScript. Поскольку строка ограничена одинарными кавычками, это не имеет значения и является таким же, как "Width : 16".

Чтобы символ экранирования в кавычках JSON находился внутри строкового литерала JavaScript, вам нужно избежать экранирования.

"Width : 16\\"

Возможно, было бы лучше иметь просто литерал объекта JS вместо строки JSON, которую вы сразу анализируете:

var inv = {"Items":[{"Quantity":1,"Description":"Width : 16\" Asd","Price":49.17,"IsEditable":false}],"Vat":20.00,"Delivery":0};
1 голос
/ 02 августа 2011

\" будет преобразован в " с помощью JavaScript уже при разборе строки.

Чтобы передать \" в JSON, вы должны использовать \\". Таким образом, проанализированная строка равна \", и она будет по-разному обрабатываться по очереди на JSON.parse.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...