JS: Двойные кавычки в JSON
Некий сайт при отправке XMLHttpRequest не возвращает responseJSON, а responseText такой вот:
Как видите, проблема в кавычках. Само собой JSON.parse не работает.
javascript меня удивил
var j = ''; var k = ''; console.log((j == k)); --> true
Нас невозможно сбить с пути, нам пофигу куда идти.
2 Ответ от teadrinker 2019-11-01 19:35:25
- teadrinker
- Администратор
- Неактивен
Re: JS: Двойные кавычки в JSON
Замените одинарный обратный слеш на двойной.
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
3 Ответ от DnsIs 2019-11-01 19:47:46
Re: JS: Двойные кавычки в JSON
Совет отличный. НО! Я не знаю как.
[1] s = ''; [2] s = s.replace . [3] json = JSON.parse(s); [4] console.log(json.name)
Не могу справиться со второй строкой.
Нас невозможно сбить с пути, нам пофигу куда идти.
4 Ответ от teadrinker 2019-11-01 20:51:22 (изменено: teadrinker, 2019-11-01 20:53:24)
- teadrinker
- Администратор
- Неактивен
Re: JS: Двойные кавычки в JSON
Если текст буквально такой , проблем с JSON.parse быть не должно.
При записи в коде он должен выглядеть с двойным обратным слешем.
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
Сообщения 4
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
ИТ-записки Чорнага кашака
При формировании строки для строкового значения JSON возникает необходимость контролировать некоторые символы. Например, если в содержимом строки есть двойная кавычка, то для получения строки JSON недостаточно взять исходную строку в двойные кавычки. Это двойную кавычку необходимо «экранировать» — поставить перед ней символ обратной косой черты («\»). Кроме двойной кавычки обязательно необходимо экранировать саму обратную косую черту, а также все управляющие символы от U+0000 до U+001F (т.е. символы от 0 до 31).
Рассмотрим подробнее, как экранируются символы. Любой символ от U+0000 до U+FFFF (не только управляющий) в строке JSON может быть представлен в виде последовательности из шести символов: обратный косая черта, строчная буква u, код символа в виде четырех шестнадцатеричные цифр. Буквы в шестнадцатеричные цифрах не зависят от регистра и могут быть как прописными, так и строчными. Например, буква «ё» представляется как «\u0451», а буква «к» как «\u043A».
Среди управляющих символов выделены «специальные символы», которые в строке JSON представлены в виде комбинации обратной косой черты и символа:
Специальный символ | Представление в строке JSON | ||
Кавычки (quotation mark) | « | U+0022 | \» |
Обратная косая черта (reverse solidus) | \ | U+005C | \\ |
Косая черта (solidus) | / | U+002F | \/ |
Backspace | U+000C | \b | |
Подача страницы (form feed) | U+000C | \f | |
Перевод строки (line feed) | U+000A | \n | |
Возврат каретки (carriage return) | U+000D | \r | |
Табуляция (tab) | U+0009 | \t |
Теперь от теории перейдем к практике. Можно самому написать парсер строки, который экранирует управляющие символы по описанным выше правилам, а можно воспользоваться готовым классом TJSONString из модуля System.JSON:
function ToJsonString(const st: String): String; var js: TJSONString; begin js := TJSONString.Create(st); try Result := js.ToString; finally js.Free; end; end;
Передав этой функции строку:
Путь к нашему файлу: "c:\temp\от 1 до 2"
получим следующий результат:
"Путь к нашему файлу:\t\"c:\\temp\\от 1 до 2\""
Кроме читаемого человеком формата, из TJSONString можно получить JSON-строку в формате UTF8 в которой экранированы не только управляющие символы, но все символы начиная с +U0080, т.е. с 128-го символа (например, кириллические символы):
function ToJsonString(const st: String): String; var js: TJSONString; begin js := TJSONString.Create(st); try Result := js.ToJSON; finally js.Free; end; end;
Передадим новой версии функции аналогичную строку:
Путь к нашему файлу: "c:\temp\от 1 до 2"
И получим вот такой не пригодный для чтения человеком результат:
"\u041F\u0443\u0442\u044C \u043A \u043D\u0430\u0448\u0435 \u043C\u0443 \u0444\u0430\u0439\u043B\u0443:\t\"c:\\temp\\ \u043E\u0442 1 \u0434\u043E 2\""
Но его замечательно понимают парсеры JSON.
Как в json передать кавычки
Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014
Помог: 0 раз(а)
Здравствуйте!
Вот как получилось, игрался с JSON.
И вот нашёл строку JSON
Но ничего не могу с ней сделать.
Ибо апостроф и всё. Любая функция пишет.
Parse error: syntax error, unexpected ‘skoye’
Как то раньше я через addslashes() и всё нормально, а тут вдруг не.
Как быть?
П.С. Подумал и понял, что даже через регулярку это не исправить.
А там строка много тысяч символов…
Отправлено: 28 Декабря, 2018 — 09:23:35
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 617 раз(а)
Поясните в чём вы видите проблему и что тут надо исправлять.
Если закрыть < добавив в конец >, то будет синтаксически корректный JSON, успешно разбирается в том числе PHP
Отправлено: 28 Декабря, 2018 — 20:37:10
Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014
Помог: 0 раз(а)
Я сам в, не понятках. НО!
Да фигурная скобка, не аккуратно отрезал.
Из за этого апострофа, не удаётся мне работать с этим JSON.
Nikol’skoye
Может я что то ни так пишу. Вот что я пишу.
$stroka = addslashes(‘>’);
И вот что имею.
Parse error: syntax error, unexpected ‘skoye’ (T_STRING) in…
Отправлено: 29 Декабря, 2018 — 09:24:03
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 617 раз(а)
Так и задавайте вопрос не про вообще не к месту упомянутый JSON, а про синтаксис строковых литералов PHP.
Синтаксис строк вполне описан в мануале: http://php.net/manual/en/languag. types.string.php
Запишите нужные для переменной данные синтаксически корректно. Ну или читайте из файла либо ещё откуда извне текста скрипта.
Отправлено: 29 Декабря, 2018 — 10:26:18
Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014
Помог: 0 раз(а)
Спасибо за ответ.
Почитаем. Разберёмся.
Отправлено: 29 Декабря, 2018 — 19:18:26
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Если коротко надо экранировать кавычки
Php считает что строка закрыта
\’
Я понимаю мелкого
Если уже с json работаешь и не знаешь азов.
Удачи)
(Добавление)
Хотя понял что именно пытаешься экранировать
Но неправильно
В addslashes надо передать переменную
И он обработает ее
Литерал(строку) нет смысла
Потому как ее цель именно сделать строку приемлимой для восприятия пыхом
Как в json передать кавычки
При записи строки с кавычкой в JSON получаю лишний символ (обратный слеш).
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, «__»»__»);
СтрокаJSON = ЗаписьJSON.Закрыть();
возвращает «__\»__»
При обратном преобразовании символ сохраняется.
Что-то лыжи не едут. Гугл молчит. Баг?
ПараметрыЗаписиJSON (JSONWriterSettings)
ЭкранированиеСимволов (EscapeCharacters)
Использование:
Только чтение.
Описание:
Тип: ЭкранированиеСимволовJSON.
Определяет способ экранирования символов при записи документа JSON.
После создания объекта данное свойство имеет значение Нет.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.6.
Методическая информация
ЭкранированиеСимволов тут каким боком?
доступные значения: Нет, СимволыВнеASCII, СимволыВнеBMP. По умолчанию: Нет.
Перебрал все возможные значения — результат тот же.
Конструктор по умолчанию устанавливает:
ЗаписьJSON.Параметры.ИспользоватьДвойныеКавычки — истина
ЗаписьJSON.Параметры.ЭкранироватьОдинарныеКавычки — ложь