Gedemin TLB.IGedemin.Dataset2JSON
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (→Примеры использования) |
SYSDBA (обсуждение | вклад) |
||
(не показаны 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 г. Лепель"}},...