Как экранировать кавычки в json
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Помог: 3 раз(а)
Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.
Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо
После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..
Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.
Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.
На последок как оно происходит на форумах
Цитата:
Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.
Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12
JSON формат, экранирование символов
О чем здесь будет речь. О том как использовать Json формат данных в GUI приложении Windows с использованием удаленной базы MySql на сервере в интернете.
Приложениие на Qt обменивается информацией с сервером по HTTP json протоколу.
Например серверу посылается в теле байты:
Тут видно , что символ двойные кавычки экранируется, иначе нельзя никак , так как структуру json на сервере не удастся декодировать через jsob_decode (php).
Обратно сервер отвечает таким же способом, кодируя свои Json данные через json_encode.
Это все понятно с небольшими нюансами.
Но далее данные из полученного json пакета сервер хочет сохранить в базе MySql.
И тут надо еще раз экранировать экранированные символы, чтобы избежать умышленного вредительства (sql инъекции и т.д.).
То есть переменную aaa надо сохранять в виде:
bbb\\\"bb\\\'b
Впоследствии, когда мы будем (допустим к примеру) считывать переменную aaa из базы и передавать нашему приложению в http запросе, то данные уже экранировать возможно не надо.
В приложение мы обратно должны в http ответе также получить экранированные символы как и при передаче серверу:
Далее в приложении (на Qt) мы сохраняем переменную aaa допустим в виджет QLineEdit и там видим ее уже так (без экранирования):
bbb"bb'b
И это тоже правильно.
Далее редактируем ее в в QLineEdit как нам вздумается добавляя все возможные символы и спец.символы.
Потом опять сохраняем эти данные на сервере, но предварительно экранируем двойные кавычки и обратный слэш.
Точнее сначала экранируем обратный слэш, а потом двойную кавычку.
И в результате мы теперь гоняем данные туда сюда корректно.
Парсинг JSON в котором встречаются «кавычки в кавычках»
Есть вот такие json данные, полученные в результате сохранения словаря:
Проблема №1: такой json является не стандартным и его Десериализация(json.loads) вызывает ошибку так как кавычки одинарные. Проблема №2 внутри элемента ‘name’ содержатся «кавычки в кавычках», т.е. банальная замена одинарных кавычек на двойные проблему не решает. Пробовал использовать функцию json.dumps, и потом передавать объект в json.loads, но почему то возвращается не словарь, а строка.
import json str_json = "" dmp = json.dumps( str_json ) jstr = json.loads(dmp) print(jstr['id'])
TypeError: string indices must be integers
Подскажите пожалуйста как быстро и без «костелей» разобрать «такой» json? Вот похожий вопрос, но на него никто не ответил(
Как FOR JSON экранирует специальные и управляющие символы (SQL Server)
В этой статье описывается, как FOR JSON предложение инструкции SQL Server SELECT экранирует специальные символы и представляет символы управления в выходных данных JSON.
В этой статье описывается встроенная поддержка JSON в Microsoft SQL Server. Общие сведения о экранировании и кодировке в ФОРМАТЕ JSON см. в разделе 2.5 RFC JSON.
Экранирование специальных символов
Если исходные данные содержат специальные символы, FOR JSON предложение экранирует их в выходных данных JSON, \ как показано в следующей таблице. Такое экранирование происходит как в именах свойств, так и в их значениях.
| Специальный знак | Экранированные выходные данные |
|---|---|
| Кавычка ( » ) | \» |
| Обратная косая черта ( \ ) | \\ |
| Косая черта ( / ) | \/ |
| Backspace | \b |
| Подача страницы | \f |
| Новая строка | \n |
| Возврат каретки | \r |
| Горизонтальная табуляция | \t |
Управляющие символы
Если исходные данные содержат символы элемента управления, FOR JSON предложение кодирует их в выходных данных JSON в \u формате, как показано в следующей таблице.
| Управляющий символ | Закодированные выходные данные |
|---|---|
| CHAR(0) | \u0000 |
| CHAR(1) | \u0001 |
| . | . |
| CHAR(31) | \u001f |
Пример
Ниже приведен пример FOR JSON выходных данных для исходных данных, включающих как специальные символы, так и управляющие символы.
SELECT 'VALUE\ / "' AS [KEY\/"], CHAR(0) AS '0', CHAR(1) AS '1', CHAR(31) AS '31' FOR JSON PATH;
Следующие шаги
- Преобразование результатов запроса в формат JSON с помощью предложения FOR JSON (SQL Server)
- SELECT — предложение FOR (Transact-SQL)
- JSON as a bridge between NoSQL and relational worlds (JSON как мост между NoSQL и реляционными решениями)