使用/UI2/CL_JSON等从JSON动态创建内部表

2020-08-21 03:03发布

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

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


大家好

我需要调用一个API,该API返回一个JSON结构,该结构可能会发生变化(添加或删除字段),尽管我需要的字段始终在此处(不确定位置),但是在那里。

我刚刚发现了/UI2/CL_JSON类,它可以很好地获取和美化JSON,但是后来我无法动态创建内部表来访问数据。

我尝试了所有有关RTTS和cl_abap_xxdescr类的知识,但均未成功。 我可以将数据移到字段符号中并查看它,但是随后我无法做其他围绕CL_ABAP_REFDESCR类的操作,因此我无法读取结构。

有人可以帮助我吗?

谢谢!!!!!

这是JSON结构

 {
   " d":{
     "结果":[
       {
         " RebateNo":" 1234567890",
         " ValidFromDate":"/img/Date(1427839200000)/",
         " ValidToDate":"/img/Date(1459375200000)/",
         "类型":" ZZZZ",
         "状态":" Z",
         " SalesGroup":" Z",
         "所有者":" JOHN SMITH",
         " CustomerNo":" 12345",
         " CustomerName":" JOHN SMITH",
         " CustomerVAT":" 12345"
         }
       },
 .....
 }
 

这是我到目前为止的代码。

 尝试。
     调用转换sjson2html源XML响应
                                    结果XML DATA(formatted_json)。

   捕获cx_xslt_runtime_error。
     cl_abap_browser => show_html(
       出口
         title ='出了点问题-继续'
         html_string = response)。
 ENDTRY。

 如果formatted_json不是INITIAL。

   数据:TEMP TYPE REF TO数据。
   FIELD-SYMBOLS:类型数据。

   调用方法/ui2/cl_json => generate
     出口
       json =回应
       pretty_name =/ui2/cl_json => pretty_mode-camel_case
 * name_mappings =
     接收
       rr_data =温度

   DATA(lo_data)=/ui2/cl_data_access => create(ir_data = temp iv_component ='d-results')-> ref()。

   如果lo_data已绑定。
     ASSIGN lo_data-> *至。

     数据lo_desc TYPE REF至CL_ABAP_TYPEDESCR。

     lo_desc = cl_abap_refdescr => describe_by_data(p_data = lo_data)。

   万一。

     cl_abap_browser => show_html(
       出口
         title ='JSON文件-继续'
         html_string = cl_abap_codepage => convert_from(formatted_json))。

 万一。

 

这是我在字段符号中看到的:表和深层结构,但是没有名称,所以我无法访问它。

debug-ui2-json.jpg (42.7 kB)

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

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


大家好

我需要调用一个API,该API返回一个JSON结构,该结构可能会发生变化(添加或删除字段),尽管我需要的字段始终在此处(不确定位置),但是在那里。

我刚刚发现了/UI2/CL_JSON类,它可以很好地获取和美化JSON,但是后来我无法动态创建内部表来访问数据。

我尝试了所有有关RTTS和cl_abap_xxdescr类的知识,但均未成功。 我可以将数据移到字段符号中并查看它,但是随后我无法做其他围绕CL_ABAP_REFDESCR类的操作,因此我无法读取结构。

有人可以帮助我吗?

谢谢!!!!!

这是JSON结构

 {
   " d":{
     "结果":[
       {
         " RebateNo":" 1234567890",
         " ValidFromDate":"/img/Date(1427839200000)/",
         " ValidToDate":"/img/Date(1459375200000)/",
         "类型":" ZZZZ",
         "状态":" Z",
         " SalesGroup":" Z",
         "所有者":" JOHN SMITH",
         " CustomerNo":" 12345",
         " CustomerName":" JOHN SMITH",
         " CustomerVAT":" 12345"
         }
       },
 .....
 }
 

这是我到目前为止的代码。

 尝试。
     调用转换sjson2html源XML响应
                                    结果XML DATA(formatted_json)。

   捕获cx_xslt_runtime_error。
     cl_abap_browser => show_html(
       出口
         title ='出了点问题-继续'
         html_string = response)。
 ENDTRY。

 如果formatted_json不是INITIAL。

   数据:TEMP TYPE REF TO数据。
   FIELD-SYMBOLS:类型数据。

   调用方法/ui2/cl_json => generate
     出口
       json =回应
       pretty_name =/ui2/cl_json => pretty_mode-camel_case
 * name_mappings =
     接收
       rr_data =温度

   DATA(lo_data)=/ui2/cl_data_access => create(ir_data = temp iv_component ='d-results')-> ref()。

   如果lo_data已绑定。
     ASSIGN lo_data-> *至。

     数据lo_desc TYPE REF至CL_ABAP_TYPEDESCR。

     lo_desc = cl_abap_refdescr => describe_by_data(p_data = lo_data)。

   万一。

     cl_abap_browser => show_html(
       出口
         title ='JSON文件-继续'
         html_string = cl_abap_codepage => convert_from(formatted_json))。

 万一。

 

这是我在字段符号中看到的:表和深层结构,但是没有名称,所以我无法访问它。

debug-ui2-json.jpg (42.7 kB)
付费偷看设置
发送
2条回答
当学会了学习
1楼 · 2020-08-21 03:54.采纳回答

您不需要动态定义内部表。 如果可以确定所需的字段在结构中,则只需预定义您感兴趣的字段即可。JSON解析器将忽略不相关的字段:

报告ytest_json。

 "用您感兴趣的字段定义结构:
 类型:
   开始ty_result,
     RebateNo TYPE字符串,
     输入TYPE字符串
   END OF ty_result,

   开始于ty_data,
     d的开始,
       ty_result的结果类型标准表,带有EMPTY KEY,
     d末,
   结束于ty_data。

   数据:lt_data类型ty_data。

 选择结束。
 "由于255个字符的限制,带有一些缺少字段的混乱的硬编码JSON字符串
     DATA(lv_json_string)=`{" d":{" results":[{" RebateNo":" 1234567890"," Type":" ZZZZ"," Status":" Z"," SalesGroup":" Z",  "所有者":" JOHN SMITH"," CustomerNo":" 12345"," CustomerName":" JOHN SMITH"," CustomerVAT":" 12345"}]}}}。

 " ...并反序列化您的JSON
  /ui2/cl_json =>反序列化(
      出口
         json = lv_json_string
 * jsonx =
         pretty_name =/ui2/cl_json => pretty_mode-camel_case
 * assoc_arrays =
 * assoc_arrays_opt =
 * name_mappings =
 * conversion_exits =
      改变
        数据= lt_data
    )。
 
黑丝骑士
2楼-- · 2020-08-21 03:43
拉斐尔·拉伯斯(Rafael Llabres)如果您想要获得有关RTTS的帮助,请打开一个新问题/阅读(当前, 我什至不了解您要达到的目标,因为读取根本不需要CL_ABAP_REFDESCR。)

一周热门 更多>