postgresql上查询Json字段

use*_*798 3 sql postgresql json

我的数据库 pgsql 上有一个 json 列 在此输入图像描述

我需要使用 localId 搜索键,我尝试了以下两个查询:

SELECT *
FROM public.translations
    where datas->>'localId' = 7;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

 SELECT *
    FROM public.translations
        where datas->>'localId'::text = '7';
Run Code Online (Sandbox Code Playgroud)

没有结果。

请问我该怎么做?

当我进行此查询时,我没有值

SELECT datas->>'localId' as local
FROM public.translations 
SELECT datas::json->>'localId' as local
FROM public.translations 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

小智 5

你的屏幕截图有点难以阅读,但看起来你的 JSON 实际上是一个 JSON array,所以你需要从那里选择第一个元素:

where (datas -> 0 ->> 'localId')::int = 7
Run Code Online (Sandbox Code Playgroud)

或者更短一点:

where (datas #>> '{0,localId}')::int = 7
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 contains 运算符@>来检查是否至少有一个元素带有localId = 7。但@>操作员要求jsonb,而不是json,所以你需要转换你的列

where datas::jsonb @> '[{"localId": 7}]'
Run Code Online (Sandbox Code Playgroud)

网上例子