Gedemin TLB.IGedemin.Dataset2JSON

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Примеры использования)
 
(не показаны 8 промежуточных версий 1 участника)
Строка 7: Строка 7:
 
;InQ: Компонент TIBSQL, подготовленный для чтения результирующих данных. Т.е. после выполнения Execute.
 
;InQ: Компонент TIBSQL, подготовленный для чтения результирующих данных. Т.е. после выполнения Execute.
 
;OutS: Поток, куда будет записан результат.
 
;OutS: Поток, куда будет записан результат.
;Fields: Имена полей для экспорта. Через запятую. Если передана пустая строка, то будут экспортированы все поля из результирующей выборки.  
+
;Fields: Имена полей для экспорта. Через запятую. Если передана пустая строка, то будут экспортированы все поля из результирующей выборки. Имена полей не чувствительны к регистру, поэтому их можно использовать если надо сменить регистр символов в результирующем JSON. Например, в базе данных поле имеет имя ''GOODNAME'', а в результирующий JSON надо записать ''GoodName''. Тогда перечисляем список полей в нужном регистре в параметре Fields. Здесь же можно переименовать поле. Для этого следует указать ''Имя_поля_в_выборке=Имя_поля_в_JSON''. Например, в выборке поле называется ''GOODID'', а в JSON оно должно записаться как ''Id'', то указываем ''GOODID=Id''.  
;SubObjects:  
+
;SubObjects: Вложенные объекты задаются строкой формата ''name1=field1[=alias1][;field2[=alias2]][,name2=field2...]''. Пример использования см. ниже.
 +
;SkipNulls: Если True, поля имеющие значение null не будут записываться в JSON.
 
;DateTimeInMs: Даты и время записывать не в строковом представлении, а числом, в миллисекундах, в соответствии со стандартом JS.
 
;DateTimeInMs: Даты и время записывать не в строковом представлении, а числом, в миллисекундах, в соответствии со стандартом JS.
 
;TZ: Часовой пояс. Сейчас не используется. Должна быть пустая строка.
 
;TZ: Часовой пояс. Сейчас не используется. Должна быть пустая строка.
Строка 38: Строка 39:
  
 
   Set FS = Creator.GetObject(Array(FileName, fmCreate), "TFileStream", "")
 
   Set FS = Creator.GetObject(Array(FileName, fmCreate), "TFileStream", "")
   Call System.Dataset2JSON(q, FS, "", "", False, "", False, True, "name", 2, True)
+
   Call System.Dataset2JSON(q, FS, "", "", False, False, "", False, True, "name", 2, True)
  
 
   MsgBox "Time: " & (WinAPI.GetTickCount - T) & "ms"
 
   MsgBox "Time: " & (WinAPI.GetTickCount - T) & "ms"
 
End Sub
 
End Sub
 +
</syntaxhighlight>
 +
 +
Результат:
 +
<syntaxhighlight lang="ecmascript">
 +
"name": [
 +
  {
 +
    "ID": 650001,
 +
    "NAME": "Орг",
 +
    "PHONE": null,
 +
    "FAX": null,
 +
    "ZIP": null,
 +
    "COUNTRY": "1800010",
 +
    "DISTRICT": null,
 +
    "CITY": null,
 +
    "ADDRESS": null
 +
  },
 +
  {
 +
    "ID": 161863497,
 +
    "NAME": "ДКУСП \"Лепельская ПМК-75\"",
 +
    "PHONE": "12",
 +
    "FAX": null,
 +
    "ZIP": null,
 +
    "COUNTRY": "Беларусь",
 +
    "DISTRICT": null,
 +
    "CITY": null,
 +
    "ADDRESS": ", ул. Партизанская, 8, 211180 г. Лепель"
 +
  },
 +
  ...
 +
</syntaxhighlight>
 +
 +
Ограничиваем количество полей, переименовываем их и пропускаем null значения:
 +
 +
<syntaxhighlight lang="vbnet">
 +
  ...
 +
  Call System.Dataset2JSON(q, FS, "Id,NAME=name,PHONE=phone", "", True, False, "", False, True, "name", 2, True)
 +
  ...
 +
</syntaxhighlight>
 +
 +
Результат:
 +
<syntaxhighlight lang="ecmascript">
 +
"name": [
 +
  {
 +
    "Id": 650001,
 +
    "name": "Орг"
 +
  },
 +
  {
 +
    "Id": 161863497,
 +
    "name": "ДКУСП \"Лепельская ПМК-75\"",
 +
    "phone": "12"
 +
  },
 +
  ...
 +
</syntaxhighlight>
 +
 +
Создаем два вложенных объекта, пропускаем null значения:
 +
 +
<syntaxhighlight lang="vbnet">
 +
  ...
 +
  Call System.Dataset2JSON(q, FS, "Id,Name=name", _
 +
    "contact=phone;fax,address=ZIP=zip;city;district;address", _
 +
    True, False, "", False, True, "name", 2, True) 
 +
  ...
 +
</syntaxhighlight>
 +
 +
Результат:
 +
<syntaxhighlight lang="ecmascript">
 +
"name": [
 +
  {
 +
    "Id": 172437884,
 +
    "name": "ООО \"АРТЛИНК\"",
 +
    "contact": {  },
 +
    "address": { "address": "222750, г.Фаниполь, ул. Чапского, д.15, пом. 11А. Почтовый адрес: 220051, Минск, а/я 53." }
 +
  },
 +
  {
 +
    "Id": 176410916,
 +
    "name": "ООО \"ЭриданПлюс\" г.Новополоцк, РБ",
 +
    "contact": { "fax": "593-0-55" },
 +
    "address": { "address": "ул.Юбилейная, 4а, ком. 8, г. Новополоцк" }
 +
  },
 +
  ...
 +
</syntaxhighlight>
 +
 +
Тоже самое, но в неотформатированном виде:
 +
 +
<syntaxhighlight lang="vbnet">
 +
  ...
 +
  Call System.Dataset2JSON(q, FS, "Id,Name=name", _
 +
    "contact=phone;fax,address=ZIP=zip;city;district;address", _
 +
    True, False, "", False, True, "name", 0, True) 
 +
  ...
 +
</syntaxhighlight>
 +
 +
Результат:
 +
<syntaxhighlight lang="ecmascript">
 +
{"Id":161863497,"name":"ДКУСП \"Лепельская ПМК-75\"","contact":{"phone":"12",},"address":{"address":", ул. Партизанская, 8, 211180 г. Лепель"}},...
 
</syntaxhighlight>
 
</syntaxhighlight>

Текущая версия на 17:41, 18 февраля 2022

From Gedemin TLB.pas

 procedure Dataset2JSON(const InQ: IgsIBSQL; const OutS: IgsStream; const Fields: WideString; DateTimeInMs: WordBool; const TZ: WideString; WithMs: WordBool; MakeArray: WordBool; const Name: WideString; Indent: Integer; UTF8: WordBool);

Unit: Gedemin TLB

Type: procedure

Visibility: public

Member Of: IGedemin

[править] Описание

Конвертирует результат выполнения запроса в JSON объект.

[править] Параметры

InQ
Компонент TIBSQL, подготовленный для чтения результирующих данных. Т.е. после выполнения Execute.
OutS
Поток, куда будет записан результат.
Fields
Имена полей для экспорта. Через запятую. Если передана пустая строка, то будут экспортированы все поля из результирующей выборки. Имена полей не чувствительны к регистру, поэтому их можно использовать если надо сменить регистр символов в результирующем JSON. Например, в базе данных поле имеет имя GOODNAME, а в результирующий JSON надо записать GoodName. Тогда перечисляем список полей в нужном регистре в параметре Fields. Здесь же можно переименовать поле. Для этого следует указать Имя_поля_в_выборке=Имя_поля_в_JSON. Например, в выборке поле называется GOODID, а в JSON оно должно записаться как Id, то указываем GOODID=Id.
SubObjects
Вложенные объекты задаются строкой формата name1=field1[=alias1][;field2[=alias2]][,name2=field2...]. Пример использования см. ниже.
SkipNulls
Если True, поля имеющие значение null не будут записываться в JSON.
DateTimeInMs
Даты и время записывать не в строковом представлении, а числом, в миллисекундах, в соответствии со стандартом JS.
TZ
Часовой пояс. Сейчас не используется. Должна быть пустая строка.
WithMs
Записывать миллисекунды при сохранении даты и времени в строковом представлении.
MakeArray
Если True, результат будет оформлен как массив. Установите данный параметр в False, если конечный JSON будет формироваться как результат объединения нескольких вызовов Dataset2JSON.
Name
Имя JSON объекта (массива) с данными. Если не указано (пустая строка), то будет сформирован просто массив без имени.
Indent
Отступ в пробелах. Если передано 0, JSON не будет форматирован и будет занимать минимальный размер.
UTF8
Если True, то результирующие данные будут преобразованы в UTF8. Если False -- будут записаны в однобайтовой кодировке Win-1251.

[править] Примеры использования

Sub ExportToJSON
 
  Const fmCreate = &HFFFF&
  Const FileName = "c:\temp\test.json"
 
  Dim FS, Creator, T
 
  T = WinAPI.GetTickCount
 
  Set Creator = New TCreator
 
  Dim q
  Set q = Creator.GetObject(nil, "TIBSQL", "")
  Set q.Transaction = gdcBaseManager.ReadTransaction
  q.SQL.Text = "SELECT id, name, phone, fax, zip, country, district, city, address FROM gd_contact"
  q.ExecQuery
 
  Set FS = Creator.GetObject(Array(FileName, fmCreate), "TFileStream", "")
  Call System.Dataset2JSON(q, FS, "", "", False, False, "", False, True, "name", 2, True)
 
  MsgBox "Time: " & (WinAPI.GetTickCount - T) & "ms"
End Sub

Результат:

"name": [
  {
    "ID": 650001,
    "NAME": "Орг",
    "PHONE": null,
    "FAX": null,
    "ZIP": null,
    "COUNTRY": "1800010",
    "DISTRICT": null,
    "CITY": null,
    "ADDRESS": null
  },
  {
    "ID": 161863497,
    "NAME": "ДКУСП \"Лепельская ПМК-75\"",
    "PHONE": "12",
    "FAX": null,
    "ZIP": null,
    "COUNTRY": "Беларусь",
    "DISTRICT": null,
    "CITY": null,
    "ADDRESS": ", ул. Партизанская, 8, 211180 г. Лепель"
  },
  ...

Ограничиваем количество полей, переименовываем их и пропускаем null значения:

  ...
  Call System.Dataset2JSON(q, FS, "Id,NAME=name,PHONE=phone", "", True, False, "", False, True, "name", 2, True)
  ...

Результат:

"name": [
  {
    "Id": 650001,
    "name": "Орг"
  },
  {
    "Id": 161863497,
    "name": "ДКУСП \"Лепельская ПМК-75\"",
    "phone": "12"
  },
  ...

Создаем два вложенных объекта, пропускаем null значения:

  ...
  Call System.Dataset2JSON(q, FS, "Id,Name=name", _
    "contact=phone;fax,address=ZIP=zip;city;district;address", _
    True, False, "", False, True, "name", 2, True)  
  ...

Результат:

"name": [
  {
    "Id": 172437884,
    "name": "ООО \"АРТЛИНК\"",
    "contact": {  },
    "address": { "address": "222750, г.Фаниполь, ул. Чапского, д.15, пом. 11А. Почтовый адрес: 220051, Минск, а/я 53." }
  },
  {
    "Id": 176410916,
    "name": "ООО \"ЭриданПлюс\" г.Новополоцк, РБ",
    "contact": { "fax": "593-0-55" },
    "address": { "address": "ул.Юбилейная, 4а, ком. 8, г. Новополоцк" }
  },
  ...

Тоже самое, но в неотформатированном виде:

  ...
  Call System.Dataset2JSON(q, FS, "Id,Name=name", _
    "contact=phone;fax,address=ZIP=zip;city;district;address", _
    True, False, "", False, True, "name", 0, True)  
  ...

Результат:

{"Id":161863497,"name":"ДКУСП \"Лепельская ПМК-75\"","contact":{"phone":"12",},"address":{"address":", ул. Партизанская, 8, 211180 г. Лепель"}},...
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты