BDL/JSON conversion basics
When the data structures and member names match, Genero BDL variables
can be converted from/to JSON data with the util.JSON*
utility
classes.
Matching BDL and JSON data structures
In order to convert a BDL variable to/from a JSON string, the program RECORD
or
DYNAMIC ARRAY
and the JSON data string must have the same structure.
JSON object elements and BDL RECORD
member are associated by name, not by
position. Elements in the JSON string and in the BDL variable can be at a different ordinal
position.
JSON array elements and BDL DYNAMIC ARRAY
elements are associated by
position.
A JSON object can also be converted to a BDL DICTIONARY
, when the JSON object is
a list of named elements, using the same structure as the dictionary.
Example of BDL data structure:
DEFINE rec RECORD
pkey INT,
name VARCHAR(50),
arr DYNAMIC ARRAY OF STRING,
dic DICTIONARY OF DECIMAL
END RECORD
LET rec.pkey = 999
LET rec.name = "Tim Birton"
LET rec.arr[1] = "item1"
LET rec.arr[2] = "item2"
LET rec.dic["abc"] = 14.45
LET rec.dic["def"] = 18.11
{
"pkey": 999,
"name": "Tim Birton",
"arr": ["item1","item2"
],
"dic": {
"def": 18.11,
"abc": 14.45
}
}
BDL to JSON conversion
BDL variables can be converted to JSON strings for example with the util.JSON.stringify()
method.
The JSON elements get the same names of the record members, as defined in the program source. For more details about BDL to JSON names handling, see BDL names and JSON element names
Program array members in the record are converted to JSON arrays delimited by square brackets
([]
).
Special consideration needs to be taken regarding empty dynamic arrays records where all elements are null. The Genero JSON API provides options to control the production of JSON elements for empty records and array. For more details, see NULLs and empty structures
For details about BDL to JSON data type conversion rules, see BDL to JSON type conversion rules
JSON to BDL conversion
When conversion from JSON to BDL, elements in the JSON string that do not match an Genero BDL record member are ignored; no error is thrown if there is no corresponding Genero BDL member.
Genero BDL record members that have no matching JSON element are initialized to
NULL
.
The JSON value must match the data format of the destination member. If the value does not
correspond to the type (for example, if the JSON value is a character string while the target record
member is defined with a numeric type), the target member will be set to NULL
.
JSON arrays delimited by square brackets are used to fill a program array of the destination
record. The destination array should be a dynamic array. If the array is defined as static, the
additional elements of the source JSON array will be discarded, while missing elements will be
initialized to NULL
.
The JSON source string must follow the JSON format specification. It can contain multilevel structured data. If the source string is not well formatted, the runtime system will throw error -8109.
For details about JSON to BDL data type conversion rules, see JSON to BDL type conversion rules