json parse error с двойными кавычками

Двойная кавычка, даже если сбежавшая, бросает ошибку разбора.
посмотрите на код ниже

//parse the json in javascript var testJson = '{"result": ["lunch", "\"Show\""] }'; var tags = JSON.parse(testJson); alert (tags.result[1]); 

Это вызывает ошибку синтаксического анализа из-за двойных кавычек (которые уже экранированы).
Даже eval() не будет работать здесь.
Но если я сбегу от него с помощью двойных косых черт:

 var result = '{"result": ["lunch", "\\"Show\\""] }'; var tags = JSON.parse(result); alert (tags.result[1]); 

то он отлично работает.
Зачем нам нужно использовать двойную косую черту в javascript? Проблема в том, что функция PHP json_encode() выполняет двойную кавычку с одной косой чертой (например: \"show\" ), которую JSON.parse не сможет проанализировать. Как я могу справиться с этой ситуацией?

Related of "json parse error с двойными кавычками"

Ну, наконец, в синтаксисе JSON используется один и тот же показатель, поэтому нет никакой разницы, когда вы даете им что-л. с неправильным синтаксисом. В этом случае вам нужно правильно выполнить свои кавычки в php, а затем избежать их и их сбрасывание с помощью json_encode

 <?php $json = '{"result": ["lunch", "\"Show\""] }'; echo json_encode($json); ?> OUTPUT: "{\"result\": [\"lunch\", \"\\\"Show\\\"\"] }" 

Это должно работать на стороне клиента JS (если я не сделал опечаток).

Javascript unescapes свои строки и json unescapes их также. первая строка ( '{"result": ["lunch", "\"Show\""] }' ) воспринимается парсером json как {"result": ["lunch", ""Show""] } , потому что \" в javascript означает " , но не выходит из строки с двойными кавычками.

Вторая строка '{"result": ["lunch", "\\\"Show\\\""] }' сначала не привязана к {"result": ["lunch", "\"Show\""] } (и это правильно не задано json).

Я думаю, что '{"result": ["lunch", "\\"Show\\""] }' должен работать.

Эта проблема вызвана двухъядерным механизмом экранирования строк: один поступает из JS, а один – из JSON.

Комбинация символа обратной косой черты в сочетании с другим следующим символом используется для представления одного символа, который иначе не представлен внутри строки. '' \\ '' означает '\' и т. д.

Этот механизм экранирования происходит до того, как JSON.parse () работает.

Например,

 var parsedObj = JSON.parse('{"sentence": "It is one backslash(\\\\)"}'); console.log(parsedObj.sentence); >>>"It is one backslash(\)" 

С точки зрения генератора строк он передает четыре зазора «в интерпретатор JavaScript».

С точки зрения интерпретатора JavaScript, он предполагает, что есть две зазоры (\), поскольку каждая последовательность «\\» будет интерпретироваться как «1».

С точки зрения анализатора JSON он получает два зазора (\\), а правила escape-последовательности строки JSON будут анализировать его как один единственный '\', который является результатом вывода.

Объясните вам первый код:

 var testJson = '{"result": ["lunch", "\"Show\""] }'; //The real string after sequence escaping in to JS is //'{"result": ["lunch", ""Show""] }' //which is passed into the JSON.parse. //Thus, it breaks the JSON grammar and generates an error var tags = JSON.parse(testJson); alert (tags.result[1]); 

Из документов

JSON_HEX_APOS (целое число) Все 'преобразуются в \ u0027
JSON_HEX_QUOT (целое число) Все "преобразуются в \ u0022

json_encode () принимает два аргумента, значение и параметры. Поэтому постарайтесь

 json_encode($result, JSON_HEX_QUOT); // or json_encode($result, JSON_HEX_QUOT | JSON_HEX_APOS); 

Однако я этого не пробовал.

Отключите magic_quotes_gpc в php.ini .

php to javascript Object (php> = 5.3.0)

 var storesLocations = JSON.parse('<?php echo addslashes(json_encode($storesLocations,JSON_HEX_APOS | JSON_HEX_QUOT)) ?>');