背景:在解析JSON数据时,通常会事先为定义相应的ABAP数据结构。但是,当遇到一些结构纵深较为复杂的情况时,会比较麻烦。
处理:使用引用类型来定义结构中的纵深部分来达到“省事”的目的,缺点在于访问时需要使用指针动态访问。也可以参考json转换为abap数据对象并输出数据声明_json 在线转abap-CSDN博客根据已处理好的json(不压缩且包含所有数据)来生成定义部分的代码。
DATA json TYPE string.
DATA pretty_name TYPE /ui2/cl_json=>pretty_name_mode.
DATA name_mappings TYPE /ui2/cl_json=>name_mappings.
DATA: BEGIN OF data,
tab1 TYPE REF TO data,
tab2 TYPE REF TO data,
END OF data.
json = `{`
&& ` "TAB1": [{ `
&& ` "A": "A", `
&& ` "B": "B", `
&& ` "C": "C", `
&& ` "d": "d" `
&& ` }, { `
&& ` "D": "D", `
&& ` "E": "E", `
&& ` "F": "F" `
&& ` } `
&& ` ], `
&& ` "TAB2": [{ `
&& ` "KEY": "01", `
&& ` "VALUE": "第一行" `
&& ` }`
&& ` ] `
&& `} `
.
/ui2/cl_json=>deserialize(
EXPORTING
json = json
pretty_name = /ui2/cl_json=>pretty_mode-none
assoc_arrays = ''
assoc_arrays_opt = ''
name_mappings = name_mappings
CHANGING
data = data
).
解析后的数据结构: