azure PostgreSQL:JSON字段是文本数据类型,我需要嵌套的值

kgsdhlau  于 2022-12-24  发布在  PostgreSQL
关注(0)|答案(1)|浏览(153)

我将以下数据存储在一个PostgreSQL字段中,该字段被指定为文本,而不是JSON:

{"description_translated": "{\"en\": \"Description in English\", \"fr\": \"Descriptif en français\"}", "name_translated": "{\"en\": \"Name in English\", \"fr\": \"Nom en français\"}", "resource_lang": "English"}

应用程序将数据库中存储JSON的字段设置为文本字段。
我知道我可以提取一些"顶级"的内容,如"resource_lang",如下所示:

Select extras::json -> 'resource_lang'

但是如果我想得到'description_translated'的英文字符串,这两个都不起作用,都返回null:
一个二个一个一个
我试过这样的蠢事:

select extras::json -> 'description_translated'::json -> 'en' as desc_en

当然这是行不通的,那么有没有办法把嵌套的值取出来呢?
我想输出的是desc_en ="Description in English"

9nvpjoqh

9nvpjoqh1#

由于错误的json转换,您的文本字段以无效/格式错误的json结束,但可以通过几个替换来修复,如:

select
regexp_replace( 
regexp_replace(
'{"description_translated": "{\"en\": \"Description in English\", \"fr\": \"Descriptif en français\"}", "name_translated": "{\"en\": \"Name in English\", \"fr\": \"Nom en français\"}", "resource_lang": "English"}'
,'\\','','g'),'"({)|(})"','\1\2','g')::json -> 'description_translated' ->> 'en';

这样,它将返回值“Description in英语”
在这里拨弄

相关问题