Периодически возникает задача сформировать JSON с данными из Ирбиса. Например, если используется ВебИрбис в качестве источника данных для внешней системы, или если строить некое АПИ, например, для того же RESTfull API. В связи с этим появилось вот такое решение задачи. Оно удобно в первую очередь тем, что там наглядно видно формирование параметров, и его легко можно адаптировать под любые задачи. В приведенном примере создается объект пользователя, содержащий параметры и массив значений.
/* В переменную 1 пишем связки <ИмяПараметра>:<ЗначениеПараметра>/
/* в конце строки обязательно знак слеша - это переход на новую строку,
/* а в этом варианте - знак окончания данных параметра
&uf('+7w1#'
'userName:'v10," "v11," "v12/
'category:'v50/
'dateRegistration:'&uf('av51.8#1')/
),
/* В переменную 2 пишем массив с данными о выданных книгах
/* так как параметров нужно передавать несколько, то каждый из них
/* передается как подполе, а уже в подполе та же структура <ИмяПараметра>:<ЗначениеПараметра>
/* только тут знак слеша - окончание строки - ставится не в конце каждого параметра,
/* а после заполнения данных одного элемента массива
&uf('+7w2#'
(if p(v40) then
if v40^f:'*' then
'^Abrief:'v40^c,
'^BdateOfIssue:'v40^d
'^CexpectedReturnDate:'v40^e
'^DplaceOfIssue:'v40^k
fi,
fi/)
),
'{'
/* выводим простые параметры из переменной 1
/* команда if &uf('+90') <> '1' then ',' fi, используется для проставления для всех повторений поля, кроме последнего.
(if g1<>'' then
if &uf('+90') <> '1' then ',' fi,
'"'&uf('g0:'g1)'":"'&uf('g2:'g1)'"'
fi)
/* выводим массив книг, которые записаны в переменной 2
if g2<>'' then
'"books":['
(if g2<>'' then
'{'
'"'&uf('g0:'g2^A)'":"'&uf('g2:'g2^A)'",'
'"'&uf('g0:'g2^B)'":"'&uf('g2:'g2^B)'",'
'"'&uf('g0:'g2^C)'":"'&uf('g2:'g2^C)'",'
'"'&uf('g0:'g2^D)'":"'&uf('g2:'g2^D)'",'
'},'
fi)
'],'
fi,
'}'
ниже пример сформированного ответа:
{"userName":"Іванов Іван Іванович", "category":"викладач", "dateRegistration":"", "books":[{"brief":"Механизация и электрификация сельского хозяйства. - Журнал, 2013г. № ","dateOfIssue":"20131016","expectedReturnDate":"20150602","placeOfIssue":"ч.з.Г.к.",}, {"brief":"Бородіна , Ганна Іванівна. Англійська мова [Текст] : підруч. / Г. І. Бородіна , ","dateOfIssue":"20141111","expectedReturnDate":"20150602","placeOfIssue":"Г.к.",}, ],}
проверка в JSON Validator показывает, что он правильный:
{
"userName":"Іванов Іван Іванович",
"category":"викладач",
"dateRegistration":"",
"books":[
{
"brief":"Механизация и электрификация сельского хозяйства. - Журнал, 2013г. № ",
"dateOfIssue":"20131016",
"expectedReturnDate":"20150602",
"placeOfIssue":"ч.з.Г.к."
},
{
"brief":"Бородіна , Ганна Іванівна. Англійська мова [Текст] : підруч. / Г. І. Бородіна , ",
"dateOfIssue":"20141111",
"expectedReturnDate":"20150602",
"placeOfIssue":"Г.к."
}
]
}
Редактировано 2 раз. Последний раз 09.11.2020 09:35 пользователем Gena.