PostgreSQL中无法访问JSON字段值问题求助
解决PostgreSQL中无法从Prisma定义的Json字段取值的问题
先确认字段实际存储类型与内容
执行以下查询,查看raw字段的数据库类型和真实存储值:SELECT raw, pg_typeof(raw) FROM "Example" ex;如果
pg_typeof(raw)返回text,说明Prisma将模型里的Json类型映射成了PostgreSQL的text类型,而非原生的json或jsonb类型。处理text类型存储的JSON字符串
如果raw字段存的是带外层引号的JSON字符串(比如值为"{"type":"Eg","device":"Eg",...}"),直接转json后得到的是一个字符串值而非JSON对象,自然会导致->>'type'返回null。此时需要先解析字符串为JSON对象:SELECT (raw::json::json)->>'type' FROM "Example" ex;若使用PostgreSQL 16及以上版本,可直接用
jsonb_parse_text解析文本为JSONB:SELECT jsonb_parse_text(raw)->>'type' FROM "Example" ex;从根源修正字段类型
若想彻底解决问题,修改Prisma模型,明确指定字段映射为PostgreSQL的jsonb类型:model Example { // ...其他字段 raw Json? @db.JsonB // ...其他字段 }运行
prisma migrate dev更新数据库结构后,后续存储的JSON数据会直接以jsonb类型存在,即可正常使用->>操作符取值:SELECT ex.raw->>'type' FROM "Example" ex;排查JSON格式有效性
若上述方法无效,检查raw字段内容是否存在转义错误。执行以下语句验证JSON格式是否合法:SELECT json_valid(raw::text) FROM "Example" ex;返回
true说明格式正确,返回false则需要修复对应数据的JSON结构。
内容的提问来源于stack exchange,提问作者Declan Brown
相关产品推荐
相关产品推荐

