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

时间:2016-05-31 08:20:07

标签: 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"}
]

我尝试使用 CL_TREX_JSON_SERIALIZER 进行反序列化,但该内容已损坏且无法使用我的JSON (look at this question)

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

作为第三次尝试,我尝试使用Horst Keller所描述的 CALL TRANSFORMATION ,但是使用此方法我无法读取匿名数组。 (贾格尔评论了这个ABAP 2 JSON and JSON 2 ABAP with ST

的更好的链接

我的主要观点:

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

2 个答案:

答案 0 :(得分:1)

你的问题不是来自数组的匿名性,而是来自SAP JSON(De)序列化程序的尴尬,它不包括双引号,它包含JSON属性。问题已经详尽描述in this answer 如果您不想动态更改JSON,则唯一的方法是更改​​CL_TREX_JSON_DESERIALIZER课程like this

答案 1 :(得分:1)

/UI5/CL_JSON_PARSER解析格式未知的JSON。

请注意,它被多次“内部使用”,以至于您可能应该认真对待它并克隆其代码以对其进行修复。