将json解析为具有小写字段名称的数据结构

时间:2015-03-11 15:53:39

标签: json sap abap

我正在将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的改变副本是否完成了这个,我用Google搜索并且不知道如何实现这一点。

2 个答案:

答案 0 :(得分:6)

原来SAP有一个sample program on how to do this. 基本上有一个开箱即用的转换为你做了这个名为demo_json_xml_to_upper的转换。这个名字有点不幸,所以我建议重命名这个转换并将其添加到客户名称空间。

我有点沮丧,这只能通过xstrings工作,因此调试它会变得很痛苦。但是,它完美无缺并解决了我的问题。

答案 1 :(得分:0)

我对此的解决方案是低技术。我花了几个小时寻找一种简单的方法来摆脱这种混乱,即 JSON 响应可以使用小写或驼峰形式的字段名。这是:如果您知道字段名称 - 显然您知道是因为您的表具有相同的列名称 - 只需在您的 xstring 中将小写名称替换为大写名称。 如果在您的表中该字段是 USERS_ID 并且在 JSON xstring 中它是 users_ID - 去吧:

replace all occurrences of 'users_ID' in ls_string with 'USERS_ID'.

对所有字段、对象名称和调用转换 ID 执行相同操作。