当前位置: 首页 > 知识库问答 >
问题:

Oracle中属性大于4000的JSON解析

罗允晨
2023-03-14

我试图解析值大于4000个字符的JSON属性。这是我的示例JSON:

[{
        "id": "268edbb5d111",
        "name": "Sample Product",
        "status": "created",
        "description": "this is sample product",
        "productCharacteristic": [{
                "name": "property_1",
                "value": "abc",
                "valueType": "String"
            }, {
                "name": "property_2",
                "value": 123,
                "valueType": "Number"
            }, {
                "name": "property_3",
                "value": "2020-05-01T04:56:07.000+00:00",
                "valueType": "Date"
            }
        ]
    }
]

这是PL/SQL代码:

FOR x IN (SELECT *
            FROM json_table(l_response, '$[*]'
                 COLUMNS
                 id                        varchar2(255)   PATH '$.id',
                 name                      varchar2(255)   PATH '$.name',
                 description               varchar2(255)   PATH '$.description',
                 status                    varchar2(255)   PATH '$.status',
                 productCharacteristic     varchar2(4000)  FORMAT JSON PATH '$.productCharacteristic'
                 )
            ) LOOP
  -- do something
END LOOP;

ProductFeature属性可能长于4000,但将其datatype更改为VARCHAR2(32000)将使用ORA-00910:指定的长度对其datatype太长来编译包,并更改为CLOB将返回ORA-40484:JSON_TABLE列的数据类型无效。是否有一种方法可以将整个ProductFeature数组作为JSON传递,并在循环中解析它?

谢了。

共有1个答案

方安怡
2023-03-14

是否有一种方法可以将整个ProductFeature数组作为JSON传递,并在循环中解析它?

这可能不是您想要的,但您可以使用嵌套路径将所有数组元素展平:

FOR x IN (SELECT *
            FROM json_table(l_response, '$[*]'
                 COLUMNS
                 id                        varchar2(255)   PATH '$.id',
                 name                      varchar2(255)   PATH '$.name',
                 description               varchar2(255)   PATH '$.description',
                 status                    varchar2(255)   PATH '$.status',
                 nested path '$.productCharacteristic[*]'
                   COLUMNS  (
                     product_name          varchar2(255)   PATH '$.name',
                     product_value         varchar2(4000)  PATH '$.value',
                     product_value_type    varchar2(255)   PATH '$.valueType'
                   )
                 )
            ) LOOP
  -- do something
  dbms_output.put_line(x.id || ' ' || x.product_name || ' ' || x.product_value);
END LOOP;

DB<>小提琴

 类似资料:
  • 我怎么能那么做? 编辑: 哦,伙计们。我发现该列实际上是我正在测试的测试系统中的一个varchar(4000),这样做(在prod中,它应该是一个clob)。你会怀疑我是不是第一个真正使用测试系统的人...

  • 我一直在努力使我的JSON模式正确。我有一个属性,我必须根据它来确定所需的属性。下面是我的示例,我希望通过验证,因为不存在。 这是我希望通过验证的JSON 类似地,如果是,那么上述两个JSON的验证都应该通过。

  • 问题内容: 我试图找到一种从的有效载荷中解析嵌套属性的干净方法。 这是有效负载的粗略概括: 我的目标是拥有具有和字段的对象数组。 有人知道干净地解析此内容的好方法吗? 现在,我正在尝试创建一个类,并在其中创建一个用于数据,值,用户等的静态内部类。 我用来呼叫端点。 问题答案: 您需要使用JsonPath库,该库仅允许您选择必填字段,然后可以将原始数据转换为类。解决方案示例如下所示: 上面的代码打印

  • 问题内容: 给定以下格式( .properties 或 .ini ): 对于 Java ,提供了Properties类,该类提供了用于解析上述格式或与其进行交互的功能。 python 的 标准 库(2.x)中有类似的东西吗? 如果没有,我还有什么其他选择? 问题答案: 对于.ini文件,有一个ConfigParser模块,它提供与.ini文件兼容的格式。 无论如何,没有任何可用于解析完整的.pro

  • 我有来自API的json形式的对象列表。这些对象有一些属性,问题是一些对象缺少属性。那么如何无错误地解析其他属性的数据呢? 例如,我有这个缺少的属性 但这所有属性都存在:

  • 我有来自API的json形式的对象列表。这些对象有一些属性,问题是一些对象缺少属性。我的问题是:是否可以用颤振/飞镖分析这些数据?或者我必须更改为API响应,这样就不会缺少任何属性。 JSON数据: