/ui2/cl_json 序列化的性能

Performance of /ui2/cl_json serialization

过去我通过 SAP RFC 将其用于 return 任何数据结构:

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

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

如何通过通用 ABAP RFC 功能模块 return 任何数据结构?我使用 PyRFC,但据我所知,这对于这个问题应该无关紧要。

这可能表现更好:

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

摘自 official documentation.

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

的作者

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

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

仍有可能使 /ui2/cl_json 更快,方法是放弃对较低版本(7.40 以下)的支持并使用 SXML 解析器中的构建来处理 JSON,但这需要一些工作去做。我没有时间/实际要求。

@Sandra Rossi:我很乐意为 /ui2/cl_json 应用任何性能建议,所以如果您有具体示例,请将它们发送给我。在这里或在博客中。但请考虑到目前,我需要遵守 SAP_BASIS 7.00 限制。