如何在abap中反序列化匿名JSON数组?

ine*_*tom 8 abap json-deserialization

我有一个我要反序列化的匿名数组.这里的例子,所有对象都是一样的,我只编写了第一个.

[
  { "time":"08:55:54",
    "date":"2016-05-27",
    "timestamp":1464332154807,
    "level":3,
    "message":"registerResourcePath ('', '/sap/bc/ui5_ui5/ui2/ushell/resources/')",
    "details":"","component":"sap.ui.ModuleSystem"},
  {"time":"08:55:54","date":"2016-05-27","timestamp":1464332154808,"level":3,"message":"URL prefixes set to:","details":"","component":"sap.ui.ModuleSystem"},
  {"time":"08:55:54","date":"2016-05-27","timestamp":1464332154808,"level":3,"message":"  (default) : /sap/bc/ui5_ui5/ui2/ushell/resources/","details":"","component":"sap.ui.ModuleSystem"}
]
Run Code Online (Sandbox Code Playgroud)

我尝试使用CL_TREX_JSON_SERIALIZER进行反序列化,但是这个东西已经损坏,并且不适用于我的JSON (看看这个问题)

然后我尝试了/ UI2/CL_JSON.这个东西需要一个完全适合JSON对象给出的Object的"结构".在我的例子中,"结构"是指具有属性time, date, timestamp, level, message和的对象的内部表details.有问题:这个类没有正确处理reffrences:它使用classdescription来描述分配给fieldsymbol的字段.因为我不能有一个对象列表,但只有一个对象的依赖列表,通常没有问题.该解决方案既不起作用

作为第三次尝试,我尝试使用Horst KellerCALL TRANSFORMATION所描述的,但是使用这种方法,我无法读取匿名数组.(Jagger评论了这个ABAP 2 JSON和JSON 2 ABAP与ST的更好的联系)

我的主要观点:

  • 我不想改变JSON,因为这是我得到的 sap.ui.log
  • 我更喜欢使用内置功能而不是第三方框架

Sun*_*her 2

您的问题不是来自数组的匿名性,而是来自 SAP JSON (De)serializer 的尴尬,它不尊重包含 JSON 属性的双引号。这个问题在这个答案中得到了详细的描述。
如果您不想即时更改 JSON,唯一的方法就是像这样CL_TREX_JSON_DESERIALIZER更改类。