ABAP JSON转换:反序列化布尔值

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

我正在反序列化一个JSON文件,并试图找到处理布尔值的正确方法。我首先尝试将JSON/XML布尔值直接映射到本机ABAP元素,但这引发了一个异常。然后我尝试检查是否为真,并映射特定的值“X”(以各种方式),但这些方法都不起作用。寻找想法/建议

我的示例程序

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( ).