Oracle ORDS如何将查询列返回为原生JSON数组?
解决ORDS返回JSON数组为字符串的问题
问题根源在于你在子查询的json_arrayagg后添加了returning clob,这会将JSON数组强制转换为CLOB字符串类型,ORDS识别到该字段是字符串,因此返回时会对其进行转义,导致regions字段变成带引号的字符串格式。
方案一:移除returning clob
直接去掉子查询中的returning clob,让json_arrayagg返回原生的JSON类型,ORDS就能正确识别并输出原生JSON数组:
select "id","name","color","etc", (select json_arrayagg(regions) from tbl_regions r where r.id = t.id) regions from clients t;
方案二:用json_query强制转换为JSON类型
如果因版本或其他原因必须保留returning clob,可以用json_query将子查询结果转换为JSON类型,确保ORDS识别:
select "id","name","color","etc", json_query( (select json_arrayagg(regions returning clob) from tbl_regions r where r.id = t.id), '$' returning json ) regions from clients t;
执行以上任一修改后的SQL,ORDS返回的JSON中regions字段就会是原生数组格式(如"regions":["1","2"]),而非转义后的字符串。
内容的提问来源于stack exchange,提问作者Andrew Kondrashov
相关产品推荐
相关产品推荐

