首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除格林梅中的JSON中的空字段

删除格林梅中的JSON中的空字段
EN

Stack Overflow用户
提问于 2019-05-15 06:54:15
回答 2查看 402关注 0票数 0

使用基于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文件中删除空字段。

代码语言:javascript
复制
sed -i 's/\(\(,*\)"[a-z_]*[0-9]*":null\(,*\)\)*/\3/g' output.json

但是,寻找一种方法来做它,数据库本身,因为它将更快。有任何建议如何在不影响查询性能的情况下在格林梅中呈现json_strip_null函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-02 21:35:23

在pg8.3上,我在GP 5.17中也遇到了同样的问题--并且成功地使用这个正则表达式删除了空值键对。我在json列的初始insert中使用了这一点,但是您可以调整:

代码语言:javascript
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2019-05-15 13:43:26

您可以使用合并将空字符串或其他值替换为空值。

https://www.postgresql.org/docs/8.3/functions-conditional.html

合并函数返回其第一个参数,即非空参数。只有当所有参数都为空时才返回null。当检索数据以供显示时,它通常用于替换默认值以代替空值,例如:

选择合并(描述,short_description,‘(无)’).如果它不是null,则返回描述,否则返回short_description (如果不是null),否则返回(none)。..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56143314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档