将 json 解析为具有小写字段名称的数据结构
Parsing json into data structures with lower case field names
我正在将 JSON 解析为 ABAP 结构,并且有效:
DATA cl_oops TYPE REF TO cx_dynamic_check.
DATA(text) = `{"TEXT":"Hello ABAP, I'm JSON!","CODE":"123"}`.
TYPES: BEGIN OF ty_structure,
text TYPE string,
code TYPE char3,
END OF ty_structure.
DATA : wa_structure TYPE ty_structure.
TRY.
text = |\{"DATA":{ text }\}|.
CALL TRANSFORMATION id OPTIONS clear = 'all'
SOURCE XML text
RESULT data = wa_structure.
WRITE: wa_structure-text , wa_structure-code.
CATCH cx_transformation_error INTO cl_oops.
WRITE cl_oops->get_longtext( ).
ENDTRY.
有趣的是 CODE 和 TEXT 区分大小写。对于大多数外部系统,拥有所有 CAPS 标识符是丑陋的,所以我一直试图解析 {"text":"Hello ABAP, I'm JSON!","code":"123"}
但没有成功。我查看了这些选项,我查看了 id
的更改副本是否可以完成此操作,我用谷歌搜索但不知道如何完成此操作。
原来 SAP 有一个 sample program on how to do this.
基本上有一个开箱即用的转换可以为您完成此操作,称为 demo_json_xml_to_upper
。这个名字有点不好意思,所以我建议重命名这个转换并将它添加到客户命名空间。
我有点沮丧,因为这只能通过 xstrings 工作,所以调试它变得很痛苦。但是,它工作得很好,解决了我的问题。
我对此的解决方案是低技术含量的。我花了几个小时寻找一种简单的方法来摆脱这种混乱局面,即 JSON 响应可能具有小写或驼峰式的字段名。在这里:如果您知道字段名称 - 显然您知道,因为您的 table 具有相同的列名称 - 只需在您的 xstring 中将小写名称替换为大写名称。
如果在你的 table 字段中是 USERS_ID 而在 JSON xstring 中它是 users_ID - 去吧:
replace all occurrences of 'users_ID' in ls_string with 'USERS_ID'.
对所有字段以及对象名称和调用转换 ID 执行相同操作。
我正在将 JSON 解析为 ABAP 结构,并且有效:
DATA cl_oops TYPE REF TO cx_dynamic_check.
DATA(text) = `{"TEXT":"Hello ABAP, I'm JSON!","CODE":"123"}`.
TYPES: BEGIN OF ty_structure,
text TYPE string,
code TYPE char3,
END OF ty_structure.
DATA : wa_structure TYPE ty_structure.
TRY.
text = |\{"DATA":{ text }\}|.
CALL TRANSFORMATION id OPTIONS clear = 'all'
SOURCE XML text
RESULT data = wa_structure.
WRITE: wa_structure-text , wa_structure-code.
CATCH cx_transformation_error INTO cl_oops.
WRITE cl_oops->get_longtext( ).
ENDTRY.
有趣的是 CODE 和 TEXT 区分大小写。对于大多数外部系统,拥有所有 CAPS 标识符是丑陋的,所以我一直试图解析 {"text":"Hello ABAP, I'm JSON!","code":"123"}
但没有成功。我查看了这些选项,我查看了 id
的更改副本是否可以完成此操作,我用谷歌搜索但不知道如何完成此操作。
原来 SAP 有一个 sample program on how to do this.
基本上有一个开箱即用的转换可以为您完成此操作,称为 demo_json_xml_to_upper
。这个名字有点不好意思,所以我建议重命名这个转换并将它添加到客户命名空间。
我有点沮丧,因为这只能通过 xstrings 工作,所以调试它变得很痛苦。但是,它工作得很好,解决了我的问题。
我对此的解决方案是低技术含量的。我花了几个小时寻找一种简单的方法来摆脱这种混乱局面,即 JSON 响应可能具有小写或驼峰式的字段名。在这里:如果您知道字段名称 - 显然您知道,因为您的 table 具有相同的列名称 - 只需在您的 xstring 中将小写名称替换为大写名称。 如果在你的 table 字段中是 USERS_ID 而在 JSON xstring 中它是 users_ID - 去吧:
replace all occurrences of 'users_ID' in ls_string with 'USERS_ID'.
对所有字段以及对象名称和调用转换 ID 执行相同操作。