You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中嵌套JSON字符串属性提取返回null问题求解

问题分析

你的问题核心在于node字段存储的是字符串化的JSON,而非原生JSON对象。当你用-> 'node'取出值时,它是一个JSON类型的字符串(带外层双引号),直接转text后会保留这些引号,再转json得到的依然是字符串,而非可解析的JSON对象,自然无法提取id_属性。

解决方案

直接使用->>运算符取出node的纯文本内容(自动去掉外层双引号),再将其转换为JSON对象,最后提取目标属性即可。

简化后的正确查询

SELECT 
  (('{"tags": ["projects"],
    "doc_id": "None",
    "node": "{\"id_\": \"0de73396-5b02-4e7e-895b-70fd09c1ec0c\", \"embedding\": null}"
   }'::json ->> 'node')::json ->> 'id_') AS node_id;

更简洁的写法(PostgreSQL 16+)

如果你使用的是PostgreSQL 16及以上版本,可以用json_parse函数直接解析字符串化的JSON,代码更直观:

SELECT 
  json_parse(
    '{"tags": ["projects"],
    "doc_id": "None",
    "node": "{\"id_\": \"0de73396-5b02-4e7e-895b-70fd09c1ec0c\", \"embedding\": null}"'::json ->> 'node'
  ) ->> 'id_' AS node_id;
关键知识点
  • ->:返回JSON类型的值(保留JSON结构,包括字符串的外层引号)
  • ->>:返回文本类型的值(自动去除JSON字符串的外层引号,得到纯文本内容)
  • 当存储的JSON嵌套了字符串化的JSON时,必须先取出纯文本再解析为JSON对象,才能访问内部属性

内容的提问来源于stack exchange,提问作者Kent Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:53:09