字符串到JSON序列化器的长度是否限制为255个字符?

2020-08-30 19:47发布

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

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


大家好,

我正在构建将s4hana与外部Web服务集成在一起的应用程序,例如。 ariba的成功因素。 因此,我们的s4hana abap正在使用基于python的rest api。 在将主体参数传递给rest api调用时,我正在将字符串结构序列化为json格式,这将被我们的rest api接受。 例如,

body_in_string:

" Attribute1":" Value1",

" Attribute2":" Value2",

" Attribute3":[{" Sub-attri1":" Name1"},[{" Sub-attri2":" Name2"},[{" Sub-attri3":" Name3"},[{" Sub -attri4":" Name4"},[{" Sub-attri5":" Name5"},[{" Sub-attri6":" Name6"},[{" Sub-attri7":" Name7"},[{ " Sub-attri8":" Name8"},[{" Sub-attri9":" Name9"},[{" Sub-attri10":" Name10"}],

" Attribute4":" Value4",

" Attribute5":" Value5",

" Attribute6":" Value6",

" Attribute7":" Value7"

我正在使用

/ui2/cl_json =>序列化(data = body_in_string compress = abap_false pretty_name =/ui2/cl_json => pretty_mode-camel_case)。

将上述字符串序列化为json格式

{" Attribute1":" Value1",

" Attribute2":" Value2",

" Attribute3":[{" Sub-attri1":" Name1"},[{" Sub-attri2":" Name2"},[{" Sub-attri3":" Name3"},[{" Sub -attri4":" Name4"},[{" Sub-attri5":" Name5"},[{" Sub-attri6":" Name6"},[{" Sub-attri7":" Name7"},[{ " Sub-attri8":" Name8"},[{" Sub-attri9":" Name9"},[{" Sub-attri10":" Name10"}],

" Attribute4":" Value4",

" Attribute5":" Value5",

" Attribute6":" Value6",

" Attribute7":" Value7"}

/ui2/cl_json序列化程序仅将字符串序列化为json,最多255个字符,其余部分被截断。 我也尝试过-

数据lo_json_writer类型参考cl_sxml_string_writer。
lo_json_writer = cl_sxml_string_writer => create(type = if_sxml => co_xt_json)。
呼叫转换ID
源正文= body_in_string
结果XML lo_json_writer。 >

也尝试过

数据lr_json_serializer类型参考cl_trex_json_serializer。
创建对象lr_json_serializer
导出
data = body_in_string。
lr_json_serializer-> serialize()。
lv_body = lr_json_ser。/p>

所有选项都将body_in_string上面的255个字符后的字符串值截断为json序列化。

请帮助!。

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

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


大家好,

我正在构建将s4hana与外部Web服务集成在一起的应用程序,例如。 ariba的成功因素。 因此,我们的s4hana abap正在使用基于python的rest api。 在将主体参数传递给rest api调用时,我正在将字符串结构序列化为json格式,这将被我们的rest api接受。 例如,

body_in_string:

" Attribute1":" Value1",

" Attribute2":" Value2",

" Attribute3":[{" Sub-attri1":" Name1"},[{" Sub-attri2":" Name2"},[{" Sub-attri3":" Name3"},[{" Sub -attri4":" Name4"},[{" Sub-attri5":" Name5"},[{" Sub-attri6":" Name6"},[{" Sub-attri7":" Name7"},[{ " Sub-attri8":" Name8"},[{" Sub-attri9":" Name9"},[{" Sub-attri10":" Name10"}],

" Attribute4":" Value4",

" Attribute5":" Value5",

" Attribute6":" Value6",

" Attribute7":" Value7"

我正在使用

/ui2/cl_json =>序列化(data = body_in_string compress = abap_false pretty_name =/ui2/cl_json => pretty_mode-camel_case)。

将上述字符串序列化为json格式

{" Attribute1":" Value1",

" Attribute2":" Value2",

" Attribute3":[{" Sub-attri1":" Name1"},[{" Sub-attri2":" Name2"},[{" Sub-attri3":" Name3"},[{" Sub -attri4":" Name4"},[{" Sub-attri5":" Name5"},[{" Sub-attri6":" Name6"},[{" Sub-attri7":" Name7"},[{ " Sub-attri8":" Name8"},[{" Sub-attri9":" Name9"},[{" Sub-attri10":" Name10"}],

" Attribute4":" Value4",

" Attribute5":" Value5",

" Attribute6":" Value6",

" Attribute7":" Value7"}

/ui2/cl_json序列化程序仅将字符串序列化为json,最多255个字符,其余部分被截断。 我也尝试过-

数据lo_json_writer类型参考cl_sxml_string_writer。
lo_json_writer = cl_sxml_string_writer => create(type = if_sxml => co_xt_json)。
呼叫转换ID
源正文= body_in_string
结果XML lo_json_writer。 >

也尝试过

数据lr_json_serializer类型参考cl_trex_json_serializer。
创建对象lr_json_serializer
导出
data = body_in_string。
lr_json_serializer-> serialize()。
lv_body = lr_json_ser。/p>

所有选项都将body_in_string上面的255个字符后的字符串值截断为json序列化。

请帮助!。

付费偷看设置
发送
8条回答
绿领巾童鞋
1楼 · 2020-08-30 20:14.采纳回答

"我已验证调试器中的错误,因为在将字符串se11结构序列化为json后,我得到了截断的值。"

抱歉,但是您选择了正确的显示 调试中的变量? 选择显示内容时,可以选择显示类型,例如下面的图像中的显示:

歪着头看世界
2楼-- · 2020-08-30 20:33

Manisha Madhwani 什么是内部表?

haha101010
3楼-- · 2020-08-30 20:14

嗨Manisha,

我认为要理解当前的问题,是您用来将数据传递给序列化方法的abap类型。我不知道您的body_to_string变量是什么"类型",但是我想这有一个 最多255个字符的限制,导致在将变量值传递给序列化程序时中断该变量值。建议使用像Sandra这样的字符串表是一个很好的选择,长度超过255个字符的自定义数据类型也将有所帮助

亲切的问候

小c菟菟
4楼-- · 2020-08-30 20:11

内部表sap_t_dc_ec_req。 请找到示例代码段。


数据lv_body TYPE字符串。
数据sap_v_len TYPE i。

TYPES:ty_request的开始,
attribute1 TYPE字符串,
attribute2 TYPE字符串,
attribute3 TYPE ztt_fields,
attribute4 TYPE字符串,
attribute5 TYPE字符串,
attribute6 TYPE字符串,
ty_request的结尾。
数据:sap_s_dc_ec_req TYPE ty_request,
sap_t_dc_ec_req TYPE STAND。 br>
ls_fields-field ='DUMMY'。
ls_fields-attribute = NAME'。
将ls_fields附加到lt_fields。

ls_fields-field ='DUMMY'。
ls_fields- 属性='NAME2'。
附加ls_fields到lt_fields。

ls_fields-field ='DUMMY'。
ls_fields-attribute ='NAME3'。
附加ls_fields到lt_fields。

* &&& ---为Rest api调用准备请求参数---
sap_s_dc_ec_req-attribute1 ='127.0.0.1'。
sap_s_dc_ec_req-attribute2 = sy-uname。
sap_s_dc_ec_req-attribute6 =' 420EEE10A8A00041EE9BAEE6CBF223D5CC9'。
sap_s_dc_ec_req-attribute4 ='DUMMY'。
sap_s_dc_ec_req-attribute3 [] = lt_fields []。

* &&& ---获取utc时间
sap_s_dc_ec_req-attribute5 ='2019-10-10T15:41:02Z'。
* &&&-移至表格< br> APPEND sap_s_dc_ec_req TO sap_t_dc_ec_req。
* &&&--创建并返回JSON主体请求以进行剩余调用---
TRY。
*选项3 ui2/json序列化器

 lv_body =/ui2/cl_json =>序列化(data = sap_t_dc_ec_req compress = abap_false pretty_name =/ui2/cl_json => pretty_mode-camel_case)。
蓋茨
5楼-- · 2020-08-30 20:32

嗨,桑德拉,

感谢您的回复。 将字符串结构传递给CALL TRANSFORMATION后,我得到的字符串仅包含255个字符。 我什至尝试通过将属性手动添加到json字符串(在调试器中)来编辑相同内容,而abap编辑器显示的错误是仅可传输255个字符。 如果您进一步需要任何信息来帮助我解决此问题,请告诉我。

谢谢

Manisha Madhwani

wang628962
6楼-- · 2020-08-30 20:35

因此您得到了286个字符的字符串-问题是什么?

 [{" attribute1":" 127.0.0.1"," attribute2  ":" ROSSIS"," attribute3":[{" field":" DUMMY"," attribute":" NAME"},{" field":" DUMMY"," attribute":" NAME2"},{" field  ":" DUMMY"," attribute":" NAME3"}]," attribute4":" DUMMY"," attribute5":" 2019-10-10T15:41:02Z"," attribute6":" 420EEE10A8A00041EE9BAEE6CBF223D5CC9"}] <  br> 

PS:以下是完整的可复制示例:

 DATA lv_body TYPE字符串。
 数据sap_v_len类型i。
 类型:
 ty_field的开始,
 字段TYPE字符串,
 属性TYPE字符串,
 END OF ty_field,
 带有空键的ty_fields ty_fields类型标准表,
        开始ty_request,
 attribute1 TYPE字符串,
 attribute2 TYPE字符串,
 attribute3 TYPE ty_fields,
 attribute4 TYPE字符串,
 attribute5 TYPE字符串,
 attribute6 TYPE字符串,
 ty_request结束。
 数据:ls_fields类型ty_field,
 lt_fields类型ty_fields,
       sap_s_dc_ec_req TYPE ty_request,
 sap_t_dc_ec_req ty_request的类型标准表。

 ls_fields-field ='DUMMY'。
 ls_fields-attribute ='NAME'。
 追加ls_fields到lt_fields。

 ls_fields-field ='DUMMY'。
 ls_fields-attribute ='NAME2'。
 追加ls_fields到lt_fields。

 ls_fields-field ='DUMMY'。
 ls_fields-attribute ='NAME3'。
 追加ls_fields到lt_fields。

 * &&&-为REST API调用准备请求参数-
 sap_s_dc_ec_req-attribute1 ='127.0.0.1'。
 sap_s_dc_ec_req-attribute2 = sy-uname。
 sap_s_dc_ec_req-attribute6 ='420EEE10A8A00041EE9BAEE6CBF223D5CC9'。
 sap_s_dc_ec_req-attribute4 ='DUMMY'。
 sap_s_dc_ec_req-attribute3 [] = lt_fields []。

 * &&& ---获得世界标准时间
 sap_s_dc_ec_req-attribute5 ='2019-10-10T15:41:02Z'。
 * &&& ---移至表格
 追加sap_s_dc_ec_req到sap_t_dc_ec_req。
 * &&& ---创建并返回json主体请求以进行剩余调用---

 lv_body =/ui2/cl_json =>序列化(data = sap_t_dc_ec_req compress = abap_false pretty_name =/ui2/cl_json => pretty_mode-camel_case)。

 BREAK-要点。
南山jay
7楼-- · 2020-08-30 20:15

一周热门 更多>