util.JSON.proposeType
Describes the record structure that can hold a given JSON data string.
Syntax
util.JSON.proposeType(
s STRING )
RETURNS STRING
- s is a string value that contains JSON formatted data.
Usage
The util.JSON.proposeType() class method takes a JSON formatted string as
parameter and generates the RECORD definition that can be used as base record
definition hold the source JSON string.
If the provided string is not valid JSON, the proposeType() method will raise
error -8109. Consider
enclosing the proposeType() method call in a TRY/CATCH block, if
the source string can be malformed JSON.
In order to respect the BDL syntax, and match exactly the JSON source structure, the type
generated by proposeType() may need to be reviewed.
For example, if the JSON property name contains characters not allowed in a BDL identifiers, use
the
json_name variable definition
attribute to map the JSON property name to the RECORD element. Furthermore, the
type DICTIONARY will not be proposed. As
result, a source JSON string like {"First Name":"John","Last Name":"Piper"} will
produce: RECORD
First Name STRING,
Last Name STRING
END RECORDThat needs to be adapted to use
json_name
attributes:RECORD
first_name STRING ATTRIBUTES(json_name="First Name"),
last_name STRING ATTRIBUTES(json_name="Last Name")
END RECORDOr to a
DICTIONARY type:DICTIONARY OF STRINGExample
IMPORT util
MAIN
DEFINE js STRING
LET js='{ "cust_num":2735, "cust_name":"McCarlson",
"orderids":[234,3456,24656,34561] }'
DISPLAY util.JSON.proposeType( js )
END MAINDisplays:
RECORD
cust_num FLOAT,
cust_name STRING,
orderids DYNAMIC ARRAY OF FLOAT
END RECORD