ABAP JSON转换:反序列化布尔值
我正在反序列化一个JSON文件,并试图找到处理布尔值的正确方法。我首先尝试将JSON/XML布尔值直接映射到本机ABAP元素,但这引发了一个异常。然后我尝试检查是否为真,并映射特定的值“X”(以各种方式),但这些方法都不起作用。寻找想法/建议 我的示例程序ABAP JSON转换:反序列化布尔值,json,abap-st,Json,Abap St,我正在反序列化一个JSON文件,并试图找到处理布尔值的正确方法。我首先尝试将JSON/XML布尔值直接映射到本机ABAP元素,但这引发了一个异常。然后我尝试检查是否为真,并映射特定的值“X”(以各种方式),但这些方法都不起作用。寻找想法/建议 我的示例程序 REPORT z_json_abap2. CLASS demo DEFINITION. PUBLIC SECTION. CLASS-METHODS main. ENDCLASS. CLASS demo IMPLEMENTATI
REPORT z_json_abap2.
CLASS demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
ENDCLASS.
CLASS demo IMPLEMENTATION.
METHOD main.
TYPES: BEGIN OF ty_s_line,
posnr TYPE posnr,
return TYPE xsdboolean, "xsdboolean
reason TYPE char3,
END OF ty_s_line.
TYPES: BEGIN OF ty_s_header,
order_id TYPE vbeln,
items TYPE TABLE OF ty_s_line WITH DEFAULT KEY,
END OF ty_s_header.
DATA: lt_order TYPE ty_s_header.
DATA(lv_json) = cl_abap_codepage=>convert_to(
`{` &&
` "order_id": "51324", ` &&
` "items": [ ` &&
` { ` &&
` "line": "01", ` &&
` "return": true, ` &&
` "order_reason": "ABC" ` &&
` }, ` &&
` { ` &&
` "line": "02", ` &&
` "return": true ` &&
` }, ` &&
` { ` &&
` "line": "03", ` &&
` "return": false, ` &&
` "order_reason": null ` &&
` } ` &&
` ] ` &&
` } ` ).
TRY.
CALL TRANSFORMATION zst_order_test SOURCE XML lv_json RESULT root = lt_order.
CATCH cx_transformation_error INTO DATA(exc).
cl_demo_output=>display( exc->get_text( ) ).
RETURN.
ENDTRY.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
demo=>main( ).
我检查元素是否具有值“true”-如果是,我希望为ABAP_布尔返回适当的值。我尝试了很多选择。在最新版本中,它引发了一个异常,即值“X”是预期值
我认为这应该很容易——但又被卡住了:-)。感谢您的建议。多亏了桑德拉的提示,现在问题已经解决了。对于那些对这里感兴趣的人来说,解决方案是(关键点是使用XSDBOOLEAN——我认为我已经尝试过了,但显然没有与其他东西正确结合) 工作转换
就这么简单。。。一旦您知道如何使用特殊的ABAP类型XSDBOOLEAN,它就会自动工作。
REPORT z_json_abap2.
CLASS demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
ENDCLASS.
CLASS demo IMPLEMENTATION.
METHOD main.
TYPES: BEGIN OF ty_s_line,
posnr TYPE posnr,
return TYPE xsdboolean,
reason TYPE char3,
END OF ty_s_line.
TYPES: BEGIN OF ty_s_header,
order_id TYPE vbeln,
items TYPE TABLE OF ty_s_line WITH DEFAULT KEY,
END OF ty_s_header.
DATA: lt_order TYPE ty_s_header.
DATA(lv_json) = cl_abap_codepage=>convert_to(
`{` &&
` "order_id": "51324", ` &&
` "items": [ ` &&
` { ` &&
` "line": "01", ` &&
` "return": true, ` &&
` "order_reason": "ABC" ` &&
` }, ` &&
` { ` &&
` "line": "02", ` &&
` "return": true ` &&
` }, ` &&
` { ` &&
` "line": "03", ` &&
` "return": false, ` &&
` "order_reason": null ` &&
` } ` &&
` ] ` &&
` } ` ).
TRY.
CALL TRANSFORMATION zst_order_test SOURCE XML lv_json RESULT root = lt_order.
CATCH cx_transformation_error INTO DATA(exc).
cl_demo_output=>display( exc->get_text( ) ).
RETURN.
ENDTRY.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
demo=>main( ).