我正在将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搜索并且不知道如何实现这一点。
答案 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 执行相同操作。