Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Парсинг json с двойными кавычками (https://javascript.ru/forum/jquery/50176-parsing-json-s-dvojjnymi-kavychkami.html)

llpoolerll 15.09.2014 19:34

Парсинг json с двойными кавычками
 
Всем привет!

Как правильно парсить двойные кавычки в JSON?
На php выдаю `json_encode($arr)` и в результате вижу:

{"firstname":"test","lastname":"te\"st"}


Через $.ajax это нормально преобразуется в объект.
Но как это распарсить без $.ajax?

Вот такой парсинг -

$.parseJSON('{"firstname":"opa","lastname":"test"}');

работает нормально

Вот такой -

$.parseJSON('{"firstname":"opa","lastname":"te\"st"}');

с ошибкой

И вот такой

$.parseJSON('{"firstname":"opa","lastname":"te\\"st"}');

снова нормально.

Aetae 15.09.2014 19:35

llpoolerll, json_encode($arr) сразу преобразует как надо. Проблема надуманная.

llpoolerll 15.09.2014 19:44

$var['a'] = 'qwe"qwe';
echo json_encode($var);

выдает
{"a":"qwe\"qwe"}

а затем
$.parseJSON('{"a":"qwe\"qwe"}');
выдает
SyntaxError: Unexpected token q

llpoolerll 15.09.2014 19:47

http://api.jquery.com/jquery.parsejson/

Цитата:

The JSON standard does not permit "control characters" such as a tab or newline. An example like $.parseJSON( '{ "testing":"1\t2\n3" }' ) will throw an error in most implementations because the JavaScript parser converts the string's tab and newline escapes into literal tab and newline; doubling the backslashes like "1\\t2\\n3" yields expected results. This problem is often seen when injecting JSON into a JavaScript file from a server-side language such as PHP.

Aetae 15.09.2014 19:47

llpoolerll, естсетвенно, что
$.parseJSON('{"a":"qwe\"qwe"}');
вызывает ошибку.
Потому что запись в коде '{"a":"qwe\"qwe"}' превращается в строку {"a":"qwe"qwe"}. Ответ же от сервера приходит уже в виде готовой строки {"a":"qwe\"qwe"}(чего можно добиться написав в коде '{"a":"qwe\\"qwe"}' ). Если в $.parseJSON ты подставишь ответ сервера, а не новосозданную строку - всё будет работать.

llpoolerll 15.09.2014 19:47

Весь вопрос как добиться doubling backslashed))))

llpoolerll 15.09.2014 19:48

Цитата:

Сообщение от Aetae (Сообщение 330684)
llpoolerll, естсетвенно, что
$.parseJSON('{"a":"qwe\"qwe"}');
вызывает ошибку.
Потому что запись в коде '{"a":"qwe\"qwe"}' превращается в строку {"a":"qwe"qwe"}. Ответ же от сервера приходит уже в виде строки {"a":"qwe\"qwe"}. Если в $.parseJSON ты подставишь ответ сервера, а не новосозданную строку - всё будет работать.

Спасибо! точно! попробую!!

krasovsky 16.09.2014 07:51

Цитата:

Сообщение от llpoolerll
Как правильно парсить двойные кавычки в JSON?

Использовать html-символы

strelcov_a_a 29.06.2016 16:43

А почему бы не отдавать с сервера сразу json, а не строку?

dd_smol 29.06.2016 17:28

Цитата:

Сообщение от strelcov_a_a (Сообщение 420797)
А почему бы не отдавать с сервера сразу json, а не строку?

JSON - Это строковое представления объекта ...


Часовой пояс GMT +3, время: 21:16.