将 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 执行相同操作。