gpt4 book ai didi

abap - READ TABLE WITH TABLE KEY 未找到记录

转载 作者:行者123 更新时间:2023-12-03 03:48:19 26 4
gpt4 key购买 nike

我正在尝试使用类 /ui5/cl_json_parser 来解析 JSON 字符串。

以下代码片段重现了该问题:

REPORT ztest_json_parse.

DATA: input TYPE string,
output TYPE string,
json_parser TYPE REF TO /ui5/cl_json_parser.


input = '{"address":[{"street":"Road","number":"545"},{"street":"Avenue","number":"15"}]}'.
CREATE OBJECT json_parser.

json_parser->parse( input ).
json_parser->print( ).

output = json_parser->value( path = '/address/1/street' ).

WRITE output.

print 方法显示正确解析的 JSON 字符串,但 output 变量始终为空。

我已将代码追溯到类 /UI5/CL_JSON_PARSER 的方法 VALUE,第 15 行,其中包含:

read table m_entries into l_entry with table key parent = l_parent name = l_name.

在调试器中,我可以看到 l_parent = '/address/1'l_name = 'street',以及内部表 m_entries 包含一条 parent = '/address/1'name = 'street' 的记录。尽管如此,READ 语句始终返回 sy-subrc = 4 并且找不到任何内容。

有人可以帮忙吗?

最佳答案

首先:不要使用 /ui5/cl_json_parser 类,它仅供内部使用使用,没有可靠的文档

enter image description here

其次,以下是如何从 JSON 的第一个元素获取街道值的示例:

DATA(o_json) = cl_abap_codepage=>convert_to( '{"address":[{"street":"Road","number":"545"},{"street":"Avenue","number":"15"}]' ).
DATA(o_reader) = cl_sxml_string_reader=>create( o_json ).

TRY.
DATA(o_node) = o_reader->read_next_node( ).
WHILE o_node IS BOUND.
DATA(op) = CAST if_sxml_open_element( o_node ).
LOOP AT op->get_attributes( ) ASSIGNING FIELD-SYMBOL(<a>).
DATA(attr) = <a>->get_value( ).
ENDLOOP.
IF attr <> 'street'.
o_node = o_reader->read_next_node( ).
ELSE.
DATA(val) = CAST if_sxml_value_node( o_reader->read_next_node( ) ).
WRITE: '/address/1/street =>', val->get_value( ).
EXIT.
ENDIF.
ENDWHILE.
CATCH cx_root INTO DATA(e_txt).
ENDTRY.

据我所知,ABAP 中没有类允许像 XPath 那样获取单个 JSON 属性。

关于abap - READ TABLE WITH TABLE KEY 未找到记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58343635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com