使用array_to_json获取PostgreSQL数组后如何在JS中转为对象数组
解决方案
方案1:PostgreSQL侧直接返回正确格式(推荐)
你当前用text[]存储序列化对象字符串的结构本身就会导致array_to_json只做表层转换,不会解析内部的对象结构。
优先建议把字段类型改成jsonb[],存储时直接写入JSON对象数组,后续查询调用array_to_json就能直接输出你需要的目标格式,无需额外转换。
如果不想修改字段类型,可以直接用以下SQL做查询转换:
SELECT json_agg(jsonb_build_object( 'x', (regexp_match(elem, '''x'':''(\d+)'''))[1]::int, 'y', (regexp_match(elem, '''y'':''(\d+)'''))[1]::int )) AS result FROM unnest('{{''x'':''80'',''y'':''60''},{''x'':''750'',''y'':''590''}}'::text[]) AS elem;
执行后直接返回[{"x":80,"y":60},{"x":750,"y":590}]格式的结果。
方案2:后端JS侧转换
如果你只能拿到[["'x':'80'","'y':'60'"],["'x':'750'","'y':'590'"]]这个返回结构,用以下JS代码即可完成转换:
const arr = [["'x':'80'","'y':'60'"],["'x':'750'","'y':'590'"]]; const result = arr.map(item => { const obj = {}; item.forEach(kvStr => { // 清除冗余引号后拆分键值 const [key, value] = kvStr.replaceAll("'", "").split(":"); obj[key] = parseInt(value); }); return obj; });
转换后result就是你需要的[{x:80,y:60},{x:750,y:590}]格式。
内容的提问来源于stack exchange,提问作者alokofaarmax
相关产品推荐
相关产品推荐

