уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Работа с форматом 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.

Основная информация по библиотеке
Исходник официального примера и документация SourceForge DocWiki
В какой версии Delphi появился Delphi 2010

Пример представляет из себя Multi-Device Application. Главная форма приложения представлена на рисунке:

  1. Вкладка JSON Formatter предоставляет утилиты для форматирования и преобразования JSON-подобного текста.
  2. Вкладка 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:

Исходный код примера

Рассмотрим основные классы и методы, используемые в примере. Итак, по большому счёту, весь пример рассчитан на демонстрацию возможностей класса 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, однако, его методы позволяют сделать Ваш код более компактным и лаконичным.

Смотрите также:

При подготовке статьи использовалась информация со следующих ресурсов:

  1. Официальный репозиторий демострационных примеров Delphi на SourceForge

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии