我想将一个json字符串解析成一个abap内部表 .
一个示例json字符串看起来像这样
{“apiVersion”:“1.0”,“data”:{“location”:“德累斯顿”,“温度”:“7”,“skytext”:“小雨”,“湿度”:“96”,“风” “:”7.31 km / h“,”date“:”02-14-2017“,”day“:”Tuesday“}}
我想用这个方法
cl_fdt_json=>json_to_data
并将值和键放入这样的表中
types: begin of map,
key type string,
value type string,
end of map.
data json_data type standard table of map.
但不幸的是,它并不像这样 . 有没有人有这种问题的经验?因为我无法访问所有文档,因为这是我在SAP招聘的样本任务,这是“谜题”的最后一部分;),我很难找到解决方案 .
谢谢!!!
编辑:因此对vwegerts回答我尝试了以下(这与我原本想做的有点不同,但也可以)
DATA cl_oops TYPE REF TO cx_dynamic_check.
DATA(text) = result.
TYPES: BEGIN OF ty_structure,
skytext TYPE string,
location type string,
temperature type string,
humidity type string,
wind type string,
date type string,
day type string,
END OF ty_structure.
DATA : wa_structure TYPE ty_structure.
TRY.
CALL TRANSFORMATION id
SOURCE XML text
RESULT data = wa_structure.
message wa_structure-skytext type 'I'.
CATCH cx_transformation_error INTO cl_oops.
WRITE cl_oops->get_longtext( ).
ENDTRY.
但它仍然无法正常工作 . 当我检查wa_structure-skytext的值时,它是不幸的空 . 我找不到错误 . 有没有人有想法?
3 回答
您可能希望查看w ell-documented capabilities of the ABAP runtime system itself,而不是使用FDT类(可能并非在所有系统上都可用) . This example program可能是你的选择 . 您基本上提供了一个简单转换,它将JSON XML结构映射到您的数据结构,实例化一个sXML JSON读取器,然后将其作为源传递给
CALL TRANSFORMATION
.除了@vwegert建议使用SAP记录的json转换,你可以检查open source alternatives . This one看起来很有希望 .
ABAP中的相应结构将是:
现在,您必须找到一个适当的JSON反序列化器,它可以处理嵌套表 . 大多数反序列化器都需要表输入,因此您必须在JSON字符串的末尾添加“['...']'并定义lt_data TYPE STANDARD TABLE OF ty_json .