ABAP中的JSON反序列化

2020-09-12 03:12发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)尊敬的SAP社区 ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的SAP社区

我希望您能帮助我在SAP中进行JSON反序列化。 我收到一个JSON字符串,并希望将其转换为内部表。 在下面,您可以看到一个有效的示例,但它的行为不像普通的JSON反序列化。

这些是问题:

  • 如果JSON字符串中的字段顺序不正确(只需在JSON输入文件中切换" FirstField"和" SecondField"),则转换将转储。 通常,无论字段顺序如何,JSON反序列化都应找到匹配项。
  • 如何声明真实的布尔值? 在我的示例中,布尔值仅作为带配额("")的字符串工作。
  • 要对此进行测试,您必须创建以下报告和以下转换。

    这是报告:

     *&---------------------------------------------  ------------------------ *
     *&报告ZJSON_SEQUENCE
     *&------------------------------------------------  --------------------- *
     报告zjson_sequence。
    
     参数:p_file类型字符串是必需的。
    
     类gcl_json定义。
       公共部分。
         类方法主要。
     结束类。
    
     类gcl_json实现。
       方法主。
         类型:lty_data的开头,
                  firstfield类型c的长度为10,
                  第二字段类型boole_d,
                lty_data的末尾。
    
         数据:lt_string类型的字符串表,
               lty_data的lt_data类型表,
               lv_string类型字符串。
    
         调用函数'GUI_UPLOAD'
           出口
             文件名= p_file
           桌子
             data_tab = lt_string
           例外情况
             其他= 1。
         如果sy-subrc <> 0。
           消息ID sy-msgid类型sy-msgty号
                      sy-msgno和sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
         万一。
    
         在lt_string处循环以分配field-symbol()。
           将lv_string 连接到lv_string。
         结束循环。
    
         调用转换zjson_sequence源xml lv_string
                                                结果根= lt_data。
    
         循环到lt_data分配字段符号()。
           写入:"第一字段=",-第一字段,
                  '; 第二个字段=',-第二个字段。
           跳跃。
         结束循环。
       方法。
     结束类。
    
     在p_file值请求的选择屏幕上。
       调用函数" WS_FILENAME_GET"
         输入
           文件名= p_file
         例外情况
           其他= 1。
    
     选择开始。
       gcl_json => main()。
     

    这是转换:

     <?sap.transform简单吗?>
     
       
       
       <对象>
         
           
             <对象>
               
     
     
               
     
      
            
           
         
       
       
     
     

    这是有效的JSON示例。 需要将其保存为文本文件并由报告上传:

     {
      "一些数据":
      [
       {
        " FirstField":" ABCDE12345",
        " SecondField":" true"
       }
      ]
     }
     

    这是JSON示例,无效:

     {
      "一些数据":
      [
       {
        " SecondField":是的,
        " FirstField":" ABCDE12345"
       }
      ]
     }
     

    期待您的指导。

    亲切问候
    马克·安德烈

    6条回答
    Violet凡
    2020-09-12 03:54

    我没有使用/UI2/CL_JSON,因为您提到的第二个博客中有一个 更新使用此类是旧技术。

    但是,当我替换这些行时...

    调用转换zjson_sequence源xml lv_string
                                        结果根= lt_data。

    ...在我的上述报告中,与此有关:

    /ui2/cl_json =>反序列化(导出json = lv_string
                                          pretty_name =/ui2/cl_json => pretty_mode-camel_case
                                 更改数据= lt_data)。

    然后它仍然不起作用,因为lt_data在执行后为空。

    一周热门 更多>