Работа с форматом JSON «из коробки» появилась ещё в Delphi 2010, однако, со временем, все функции, классы и объекты для работы с JSON в Delphi были вынесены в отдельные модули (System.JSON и т.д.). Работа с JSON в Delphi 10 Seattle стала более продвинутой и представленный ниже пример демонстрирует работу с JSON, исходя из того, что Вы уже знаете о поддержке JSON в Delphi и владеете необходимыми навыками работы, хотя бы с модулем System.JSON.
Если же у Вас таковые навыки отсутствуют, то рекомендую Вам начинать с основ работы с JSON в Delphi, изучив статью Работа с JSON в Delphi 2010 — XE2 в которой даются основные сведения по работе с JSON в Delphi.
В этом примере показано, как использовать новые модули JSON, предоставляемые в RAD Studio 10 Seattle, для записи объектов JSON, форматирования JSON-подобного текста и сериализации JSON в BSON.
| Основная информация по библиотеке |
||
| Исходник официального примера и документация | DocWiki | |
| В какой версии Delphi появился | Delphi 2010 | |
Пример представляет из себя Multi-Device Application. Главная форма приложения представлена на рисунке:
- Вкладка JSON Formatter предоставляет утилиты для форматирования и преобразования JSON-подобного текста.
- Вкладка JSON to BSON позволяет преобразовывать JSON в BSON и наоборот.
Вкладка «JSON Formatter»
Вкладка «Json Formatter» используется для форматирования и преобразования JSON-текста. При этом каждая кнопка, расположенная на вкладке, предназначена для демонстрации определенных возможностей библиотеки:
- Beautify — формирует предоставленный JSON-текст в более структурированный формат, используя отступ для того же уровня пары значений имени и значения.
- Minify: форматирует предоставленный JSON-текст в JSON-объект, удалив все пробелы и комментарии, минимизируя при этом размер текста.
- To Delphi: конвертирует объект JSON в объект Delphi String.
- To Writer: генерирует фрагмент кода Delphi для создания объекта JSON.
- Флажок «Use Builders», в случае его выбора, используется для генерации фрагмента кода Delphi в соответствии со встроенным конструктором JSON, определенным в модуле «Builders». Если флажок «Use Builders» не выбран, то фрагмент кода Delphi генерируется с использованием базового класса System.JSON.Writers.
Вкладка «JSON to BSON»
Вкладка «JSON to BSON» используется, соответственно, для преобразования JSON в BSON и обратно.
Используемые модули
В примере используются следующие модули Delphi:
- System.NetEncoding
- System.JSON.Types
- System.IOUtils
- System.DateUtils
- Converters
- Writers
Исходный код примера
Рассмотрим основные классы и методы, используемые в примере. Итак, по большому счёту, весь пример рассчитан на демонстрацию возможностей класса TConverters, расположенного в модуле Converters.
Например, для форматирования JSON в удобочитаемый вид используется следующий обработчик OnClick кнопки «Beautify«:
try LoadCode(TConverters.JsonReformat(mInput.Text, True), 'javascript'); except on E: EJsonException do LoadError(E.Message); end;
Где LoadCode() и LoadError() — это вспомогательные методы, реализующие загрузку текста в компонент TWebBrowser, расположенный в правой части формы приложения:
procedure TWorkBenchForm.LoadCode(const ACode, AType: string; Wrapped: Boolean); begin WebBrowser1.EvaluateJavaScript(BuildCommand(ACode, AType, Wrapped)); end; procedure TWorkBenchForm.LoadError(const Msg: string); begin WebBrowser1.EvaluateJavaScript(BuildCommand(Msg, 'error', True)); end;
Соответственно, классовый метод TConverters.JsonReformat выполняет необходимое преобразование. В целом, класс TConverters предоставляет нам следующие методы для обработки JSON:
TConverters = class public // Json <-> Bson converter class function Bson2Json(const ABytes: TBytes; AOptions: TConverterOptions = []): string; class function Json2Bson(const AJson: string; AOptions: TConverterOptions = []): TBytes; class function BsonString2Json(const ABsonString: string; AOptions: TConverterOptions = []): string; class function Json2BsonString(const AJson: string; AOptions: TConverterOptions = []): string; // Byte <-> String convert utils class function Bytes2String(const ABytes: TBytes): string; class function String2Bytes(const AString: string): TBytes; class function JsonReformat(const AJson: string; Indented: Boolean): string; class function Json2DelphiCode(const AJson: string): string; class function Json2JsonWriterCode(const AJson: string; const AWriterName: string): string; class function Json2JsonBuilderCode(const AJson: string; const ABuilderName: string): string; end;
Собственно, название функций говорит само за себя. При этом, параметр AOptions в методах Bson2Json и Json2Bson имеет следующее описание:
type TConverterOption = (ExtendedMode, Indented); TConverterOptions = set of TConverterOption;
В целом, можно отметить, что, имея навыки работы с JSON в предыдущих версиях Delphi, можно вполне обходится и без модуля Converters, однако, его методы позволяют сделать Ваш код более компактным и лаконичным.
Смотрите также:
- Работа с JSON в Delphi 10.3 Rio — подробное описание библиотеки «JSON Objects Framework«
- Работа с JSON в Delphi 10.3 Rio #2 — подробное описание библиотеки «Readers and Writers JSON Framework«
При подготовке статьи использовалась информация со следующих ресурсов:
- Официальный репозиторий демострационных примеров Delphi на SourceForge

