Какой правильный синтаксис для складывания строки JSON? - PullRequest
0 голосов
/ 24 апреля 2019

Я использую Delphi 2009 для создания строковой переменной, содержащей простую строку JON из значений, полученных из базы данных. В результате получается строка в форме ниже (хотя настоящая строка может быть намного длиннее)

{"alice@example.com": {"first":"Alice", "id": 2},"bob@example.com": {"first":"Bob", "id":1},"cath@example.com": {"first":"Cath", "id":3},"derek@example.com": {"first":"Derek", "id": 4}}

Эта строка отправляется в виде заголовка «Переменные-получатели» в электронном письме компании.

В инструкциях по отправке электронных писем компании говорится:

Примечание. Значение заголовка «Recipient-Variables» должно быть допустимая строка JSON, иначе мы не сможем ее проанализировать. Если заголовок «Recipient-Variables» превышает 998 символов, Вы должны использовать сворачивание, чтобы распределить переменные по нескольким строкам.

Я просмотрел эти посты SO, чтобы попытаться понять, что подразумевается под свертыванием, но на самом деле не могу понять ответы, поскольку они часто ссылаются на определенный редактор.

notepad ++ определяемые пользователем регионы со складыванием

Сворачивание JSON в определенных точках

Можно ли настроить свертывание кода?

Пожалуйста, кто-нибудь может использовать мой пример, чтобы показать мне, какой синтаксис я должен использовать или какие символы мне нужно вставить в мою строку, чтобы выполнить инструкцию и сложить мою строку JSON, скажем, между записями для bob и cath?

(Кстати, я понимаю, что подразумевается под свертыванием при просмотре JSON или другого кода в редакторе , но я не понимаю, как нужно отформатировать простую строку JSON для для складывания в определенном месте)

1 Ответ

0 голосов
/ 25 апреля 2019

Я наконец-то нашел ответ, поэтому отправляю сюда, чтобы помочь другим, на всякий случай. Ответ дан в этом документе о стандартах rfc2822, опубликованном в 2001 г. Сетевой рабочей группой (П. Резник, редактор)

https://tools.ietf.org/html/rfc2822#page-11

Документ ...

определяет синтаксис для текстовых сообщений, которые отправляются между компьютерами пользователи, в рамках «электронной почты» сообщений.

... и, в частности, описывает, как создаются электронные письма и, в частности, как работать с длинными заголовками.

В разделе 2.2.3 говорится о полях длинных заголовков,> 998 символов, и говорится, что такие заголовки необходимо сложить, вставив символы CRLF, за которыми сразу следует какой-то пробел, например, пробел.

Если принимающий сервер следует тем же стандартам, он удаляет символ CRLF перед синтаксическим анализом заголовка, который сам по себе будет содержать символы пробела.

Хотя структурированные полевые тела определены таким образом, что
складывание может происходить между многими лексическими токенами (и даже
в некоторых лексических жетонах) складывание ДОЛЖНО быть ограничено
размещение CRLF на более высоких уровнях синтаксических разрывов. Например, если
тело поля определяется как значения, разделенные запятыми, рекомендуется
что сворачивание происходит после запятой, разделяющей структурированные элементы в предпочтение другим местам, где поле можно сложить, даже если
это разрешено в другом месте.

Позже в разделе 3.2.3 объясняется, как комментарии можно комбинировать со складывающимися пробелами.

Таким образом, создается впечатление, что при генерации строки с помощью кода необходимо сложить длинные строки заголовка, обнаружив синтаксическую границу более высокого уровня, например запятую, которая меньше 988 символов от начала заголовка (или последняя точка сгиба) и вставьте три шестнадцатеричных символа x0D0A20. Это может быть сделано после того, как заголовок был создан или на лету, когда он генерируется.

В качестве продолжения я заметил, что используемый мной компонент Overbytes ICS (TSslSmtpCli) имеет логическое свойство FoldHeaders, так что это может сделать всю работу за меня.

...