0

过去,我使用它通过 SAP RFC 返回任何数据结构:

json = /ui2/cl_json=>serialize( data = <lt_result> 
    pretty_name = /ui2/cl_json=>pretty_mode-low_case ).

<lt_result>如果很小,这很有效,但对于较大的数据集,这很慢。

如何通过通用 ABAP RFC 功能模块返回任何数据结构?我使用 PyRFC,但 AFAIK 这对这个问题应该没什么关系。

4

2 回答 2

3

这可能会表现得更好:

DATA(lo_json_writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).

CALL TRANSFORMATION id
                    SOURCE result = <lt_result>
                    RESULT XML lo_json_writer.

ev_json_data = lo_json_writer->get_output( ). " yours export parameter

取自官方文档

于 2019-01-04T12:00:09.137 回答
3

如果性能对您来说最重要,那么 /ui2/cl_json 是错误的选择。虽然它是 ABAP 代码和 SAP_BASIS 700 兼容的语法。CALL TRANSFORMATION id 在性能方面更好。这也写在我的博客上。顺便说一句:我是 /ui2/cl_json 的作者。

但如果它涉及灵活性、舒适性、支持的数据类型和所需的格式,那么与 /ui2/cl_json 相比,目前没有更好的解决方案。

潜在地,使用 CALL TRANSFORMATION 和自己的 XSLT 转换可以获得一些更好的、专门的实现,但它已经比 id 慢,并且会花费更多的编码工作。

通过放弃对较低版本(低于 7.40)的支持并使用内置的 SXML 解析器来处理 JSON,仍有可能使 /ui2/cl_json 更快,但这需要做一些工作。我对此没有时间/实际要求。

@Sandra Rossi: I would be happy to apply any performance suggestions for /ui2/cl_json, so if you have concrete examples, please send them to me. Here or in the blog. But please take into consideration that for the current moment, I need to conform to SAP_BASIS 7.00 limits.

于 2019-05-20T14:59:39.663 回答