Hello,
1/
After a discussion with the team we will document ATTRIBUTE and ATTRIBUTES as synonyms.
2/
Sometimes the ATTRIBUTE/ATTRIBUTES clause can be used at the array element level:
See this:
sf@toro:/tmp$ cat x.4gl
IMPORT util
TYPE t_rec RECORD
field INTEGER
END RECORD
DEFINE root_rec RECORD ATTRIBUTES(json_name="database")
arr1 DYNAMIC ARRAY ATTRIBUTES(json_name="_arr1_") OF t_rec ATTRIBUTES(json_null="null")
,arr2 DYNAMIC ARRAY ATTRIBUTES(json_name="_arr2_") OF t_rec
END RECORD
MAIN
LET root_rec.arr1[1].field = 101
--LET root_rec.arr1[2].field = 102
LET root_rec.arr1[3].field = 103
LET root_rec.arr2[1].field = 201
--LET root_rec.arr2[2].field = 202
LET root_rec.arr2[3].field = 203
DISPLAY util.JSON.format( util.JSON.stringify(root_rec) )
END MAIN
sf@toro:/tmp$ fglcomp -M x.4gl && fglrun x.42m
{
"_arr1_": [
{
"field": 101
},
null,
{
"field": 103
}
],
"_arr2_": [
{
"field": 201
},
{},
{
"field": 203
}
]
}