使用基于Postgres 8.4的Greenprime5.*数据库。
我正在使用row_to_json和array_to_json函数来创建JSON输出;但最终在JSON中有带有null值的键。Postgres的最新版本有json_strip_null函数来删除带空值的键。
我需要将生成的JSON文件导入到MongoDB;但是mongoimport也没有从JSON忽略空键的选项。
一种方法是使用null创建JSON文件,然后使用sed从JSON文件中删除空字段。
sed -i 's/\(\(,*\)"[a-z_]*[0-9]*":null\(,*\)\)*/\3/g' output.json但是,寻找一种方法来做它,数据库本身,因为它将更快。有任何建议如何在不影响查询性能的情况下在格林梅中呈现json_strip_null函数?
发布于 2019-08-02 21:35:23
在pg8.3上,我在GP 5.17中也遇到了同样的问题--并且成功地使用这个正则表达式删除了空值键对。我在json列的初始insert中使用了这一点,但是您可以调整:
select
col5,
col6,
regexp_replace(regexp_replace(
(SELECT row_to_json(j) FROM
(SELECT
col1,col2,col3,col4
) AS j)::text,
'(?!{|,)("[^"]+":null[,]*)','','g'),'(,})$','}')::json
AS nvp_json
from foo从内部开始工作,首先将row_to_json构造函数的结果转换为文本,然后内部regexp替换任何"name":null,值,外部regexp从末尾对任何挂起的逗号进行裁剪,最后将整个过程转换为json。
发布于 2019-05-15 13:43:26
您可以使用合并将空字符串或其他值替换为空值。
https://www.postgresql.org/docs/8.3/functions-conditional.html
合并函数返回其第一个参数,即非空参数。只有当所有参数都为空时才返回null。当检索数据以供显示时,它通常用于替换默认值以代替空值,例如:
选择合并(描述,short_description,‘(无)’).如果它不是null,则返回描述,否则返回short_description (如果不是null),否则返回(none)。..。
https://stackoverflow.com/questions/56143314
复制相似问题