Перейти к содержимому

Как экранировать кавычки в json

  • автор:

Как экранировать кавычки в 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 и реляционными решениями)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *