PostgreSQL中无法从JSONB列提取指定字段数据求助
解决JSONB数组中提取字段的问题
哦,我知道问题出在哪了——你的jsondata列里存的是一个JSON数组,不是单个JSON对象!你之前的查询直接去数组里找id键,当然会返回null啦,因为数组本身没有这些属性,得先定位到数组里的具体对象才行。
情况1:数组中只有一个对象(如你的示例)
你可以先通过数组索引(比如-> 0)获取数组的第一个元素,再从这个对象里提取需要的字段:
SELECT (jsondata -> 0) ->> 'id' AS id, (jsondata -> 0) -> 'identifier1' ->> 'key' AS identifier1_key, (jsondata -> 0) -> 'identifier2' ->> 'key' AS identifier2_key, (jsondata -> 0) -> 'identifier3' ->> 'key' AS identifier3_key, (jsondata -> 0) -> 'identifier4' ->> 'key' AS identifier4_key FROM Customer;
这里的-> 0用来获取数组的第一个元素(数组索引从0开始),之后的->> 'id'就是从这个JSON对象里提取字符串类型的id值,-> 'identifier1' ->> 'key'则是先拿到identifier1对象,再提取它的key值。
情况2:数组中有多个对象
如果你的jsondata数组里可能包含多个对象,想要把每个对象拆成单独的行来提取字段,可以用jsonb_array_elements函数展开数组:
SELECT elem ->> 'id' AS id, elem -> 'identifier1' ->> 'key' AS identifier1_key, elem -> 'identifier2' ->> 'key' AS identifier2_key, elem -> 'identifier3' ->> 'key' AS identifier3_key, elem -> 'identifier4' ->> 'key' AS identifier4_key FROM Customer, jsonb_array_elements(jsondata) AS elem;
这个查询会把每个数组元素作为单独的行返回,方便你处理多条数据。
额外注意事项
看你给出的示例JSON里,identifier3的key是XYZ,identifier4的key是ABC——如果这些是字符串类型的话,一定要加上双引号(比如"key": "XYZ"),否则这是无效的JSON格式,会导致JSONB存储或提取失败,确保你的实际数据是合法的JSON结构哦。
内容的提问来源于stack exchange,提问作者Taukheer
相关产品推荐
相关产品推荐

