暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle XML IsNumber和APEX JSON IsNumber不匹配

ASKTOM 2019-04-09
368

问题描述

你好,

DECLARE
  x xmltype;
  y CLOB;
  b varchar2(6);
BEGIN
  WITH a AS
   (SELECT 'bachstr.- 087-87-087' t
      FROM dual
    )
  SELECT xmltype(t)
    INTO x
    FROM a;
  apex_json.initialize_clob_output;
  apex_json.write(x);
  y := apex_json.get_clob_output;
  IF y IS NOT json THEN
    b := 'FALSE';
  ELSE
    b := 'TRUE';
  END IF;
  apex_json.free_output;
  dbms_output.put(y);
  dbms_output.put_line(' is JSON: ' || b);
  y := regexp_replace(y,
                      ':([+-]?)( +)([0-9\.]+)([},])',
                      ':"\1\2\3"\4');
  dbms_output.put(y);
  IF y IS NOT json THEN
    b := 'FALSE';
  ELSE
    b := 'TRUE';
  END IF;
  dbms_output.put_line(' is JSON: ' || b);
END;
复制


上述代码在评估tel字符串 (该格式在德国用于存储电话分机)。
要么XML IsNumber将 '- 087' 评估为数字,那么APEX_JSON也应该这样做。
或者XML IsNumber将 '- 087' 视为字符串,那么APEX_JSON没有问题。

我们该怎么处理?

问候,迪特

专家解答

我不确定这里有什么问题。没有XSD来定义XML元素的数据类型。一个JSON数字以以下开头:

-可选的减号 “-”
-数字1-9或
-紧接小数点后的数字0

所以 “-087” 不是一个JSON数字 => 它是一个字符串。

代码片段中的正则表达式没有匹配 & 两个测试返回是JSON: TRUE:

{"str":"bachstr.","tel":"- 087","tel1":-87,"tel2":"-087"}
 is JSON: TRUE
{"str":"bachstr.","tel":"- 087","tel1":-87,"tel2":"-087"}
 is JSON: TRUE
复制



文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论