Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Разбор и обработка JSON массива MAILCONFIGS в Delphi и Pascal: извлечение и использование данных о настройках почты

Delphi , Интернет и Сети , Почтовый клиент

 

В данной статье мы рассмотрим пример разбора JSON данных, представленных в формате, указанном в исходном вопросе, с использованием встроенного JSON-фреймворка Delphi. Задача состоит в извлечении данных из массива MAILCONFIGS, содержащего пары ключ-значение, где ключ – адрес электронной почты, а значение – объект с данными конфигурации почты (client_id, apptoken, temptoken).

Исходные JSON данные:

{ "SPWORKDATA": { "DB_PARAMS": 
{ "Pooled":"False", "DriverID":"Oracle", "Database":"iranums", "User_name":"rms", "Password":"trojan", 
"Server":"lilly.com", "Port":"5432", "Monitorby":"", "MetaDefSchema":"False" }, 
"MAILCONFIGS": [ {"mail1@gmail.com": { "client_id": "ClientID_Data1", "apptoken": "apptoken data1", "temptoken": "temporary token1" } }, 
{"mail2@gmail.com": { "client_id": "client_data2", "apptoken": "apptoken data2", "temptoken": "temporary token2" } } ], 
"MEDIASERVER": { "Server": "192.162.2.185" }, "MSGSERVER": { "Server": "127.0.0.1", "Port":"55555" } } }

Решение с использованием встроенного JSON-фреймворка Delphi:

Пользователь JIMSMITH, используя предоставленный Remy Lebeau код, смог решить задачу. Приведем этот код с небольшими пояснениями и улучшениями. Предполагается, что вы используете Delphi 10.1 Update 2 или более позднюю версию, так как в ней уже присутствует встроенный JSON-фреймворк.

uses
  System.JSON, System.SysUtils;

procedure ProcessMailConfigs(const JsonString: string);
var
  JsonObj: TJSONObject;
  MailConfigsArray: TJSONArray;
  MailConfigObj: TJSONObject;
  Email: string;
  ConfigObj: TJSONObject;
  ClientID, AppToken, TempToken: string;
begin
  try
    JsonObj := TJSONObject.ParseJSONValue(JsonString) as TJSONObject;
    try
      MailConfigsArray := JsonObj.GetValue('MAILCONFIGS') as TJSONArray;
      for var element in MailConfigsArray do
      begin
        // Каждый элемент массива - это TJSONObject, содержащий пару email:config
        MailConfigObj := element as TJSONObject;

        // Получаем email из ключа объекта
        for var pair in MailConfigObj.GetKeys do
        begin
          if VarIsObject(pair) and (pair as TJSONObject).ClassName = 'TJSONObject' then
          begin
            Email := pair;
            ConfigObj := (pair as TJSONObject);
            break;
          end;
        end;

        // Извлекаем данные конфигурации
        ClientID := ConfigObj.GetValue('client_id').Value;
        AppToken := ConfigObj.GetValue('apptoken').Value;
        TempToken := ConfigObj.GetValue('temptoken').Value;

        // Выводим данные (или используем их по необходимости)
        Writeln('Email: ' + Email);
        Writeln('Client ID: ' + ClientID);
        Writeln('App Token: ' + AppToken);
        Writeln('Temp Token: ' + TempToken);
        Writeln('---');
      end;
    finally
      JsonObj.Free;
    end;
  except
    on E: Exception do
      Writeln('Ошибка при разборе JSON: ' + E.Message);
  end;
end;

// Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
var
  JsonString: string;
begin
  JsonString := '{ "SPWORKDATA": 
      { "DB_PARAMS": 
       { "Pooled":"False", 
         "DriverID":"Oracle", 
         "Database":"iranums", 
         "User_name":"rms", 
         "Password":"trojan", 
         "Server":"lilly.com", 
         "Port":"5432", 
         "Monitorby":"", 
         "MetaDefSchema":"False" }, 
       "MAILCONFIGS": [ 
         {"mail1@gmail.com": { "client_id": "ClientID_Data1", "apptoken": "apptoken data1", "temptoken": "temporary token1" } }, 
         {"mail2@gmail.com": { "client_id": "client_data2", "apptoken": "apptoken data2", "temptoken": "temporary token2" } } ], 
       "MEDIASERVER": { "Server": "192.162.2.185" }, "MSGSERVER": { "Server": "127.0.0.1", "Port":"55555" } } }';
  ProcessMailConfigs(JsonString);
end;

Пояснения к коду:

  1. uses System.JSON, System.SysUtils;: Подключение необходимых модулей для работы с JSON и общими функциями.
  2. ProcessMailConfigs(const JsonString: string): Процедура, принимающая JSON строку в качестве параметра.
  3. TJSONObject.ParseJSONValue(JsonString) as TJSONObject: Разбор JSON строки в объект TJSONObject.
  4. JsonObj.GetValue('MAILCONFIGS') as TJSONArray: Получение массива MAILCONFIGS из объекта.
  5. Цикл for var element in MailConfigsArray do: Итерация по элементам массива MAILCONFIGS. Каждый элемент представляет собой TJSONObject, содержащий пару "email:config".
  6. Вложенный цикл for var pair in MailConfigObj.GetKeys do: Перебор ключей в объекте MailConfigObj для получения адреса электронной почты.
  7. ConfigObj := (pair as TJSONObject);: Получение объекта конфигурации.
  8. ConfigObj.GetValue('client_id').Value; и аналогичные строки: Извлечение значений client_id, apptoken и temptoken из объекта конфигурации.
  9. Writeln(...): Вывод извлеченных данных в консоль. В реальном приложении эти данные будут использоваться для дальнейшей обработки.
  10. try...finally...except: Обработка исключений и освобождение ресурсов.

Альтернативное решение: использование библиотеки SuperObject:

Если вы работаете с более старыми версиями Delphi, в которых отсутствует встроенный JSON-фреймворк, или хотите более удобный и быстрый способ работы с JSON, можно использовать стороннюю библиотеку, например, SuperObject. SuperObject предоставляет более гибкий и удобный API для работы с JSON, а также хорошую производительность.

Пример использования SuperObject (требует установки библиотеки):

uses
  SuperObject, SysUtils;

procedure ProcessMailConfigsSuperObject(const JsonString: string);
var
  JsonValue: TSuperObject;
  MailConfigsArray: TSuperObject;
  MailConfigObj: TSuperObject;
  Email: string;
  ConfigObj: TSuperObject;
  ClientID, AppToken, TempToken: string;
begin
  JsonValue := TSuperObject.ParseJSONValue(JsonString);
  try
    MailConfigsArray := JsonValue.Get('MAILCONFIGS') as TSuperObject;
    for MailConfigObj in MailConfigsArray do
    begin
      for Email in MailConfigObj.Keys do
      begin
        ConfigObj := MailConfigObj.Get(Email) as TSuperObject;
        ClientID := ConfigObj.Get('client_id').AsString;
        AppToken := ConfigObj.Get('apptoken').AsString;
        TempToken := ConfigObj.Get('temptoken').AsString;

        Writeln('Email: ' + Email);
        Writeln('Client ID: ' + ClientID);
        Writeln('App Token: ' + AppToken);
        Writeln('Temp Token: ' + TempToken);
        Writeln('---');
      end;
    end;
  finally
    JsonValue.Free;
  end;
end;

Заключение:

В данной статье мы рассмотрели два способа разбора JSON массива MAILCONFIGS в Delphi и Pascal: с использованием встроенного JSON-фреймворка и сторонней библиотеки SuperObject. Выбор конкретного способа зависит от версии Delphi, которую вы используете, и ваших предпочтений в отношении удобства и производительности. Оба решения позволяют эффективно извлекать и использовать данные о настройках почты, содержащиеся в JSON.

Создано по материалам из источника по ссылке.

Статья о разборе JSON данных с использованием встроенного JSON-фреймворка Delphi и библиотеки SuperObject.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Почтовый клиент ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-04-23 05:11:43/0.0036568641662598/0