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

Cosmos DB SQL API查询:提取转义嵌套JSON中的temp_pcb字段

解决Cosmos DB中转义JSON字符串的字段查询问题

这个问题我之前也碰到过——因为Gateway_Info其实是转义后的JSON字符串,不是嵌套的JSON对象,所以你直接用对象访问语法肯定拿不到值。解决方法很简单,用Cosmos DB内置的JSON.parse()函数把字符串转成可访问的JSON对象就行。

正确的查询语句

直接解析Gateway_Info字符串后访问目标字段:

SELECT JSON.parse(c.Gateway_Info).temp_pcb AS temp_pcb FROM c

如果需要同时查询其他字段(比如Evaporator_Temperature),可以这样写:

SELECT 
  c.Evaporator_Temperature,
  JSON.parse(c.Gateway_Info).temp_pcb,
  JSON.parse(c.Gateway_Info).temp_sensor
FROM c

为什么你之前的查询不行?

  • SELECT a.temp_pcb FROM c join a in c.Gateway_Info:这里的join会把Gateway_Info字符串拆成单个字符遍历,a代表的是单个字符,自然没有temp_pcb字段
  • SELECT c.Gateway_Info.temp_pcb FROM c:Gateway_Info是字符串类型,字符串不存在temp_pcb属性,所以返回undefined
  • 两种用索引的写法(["\"temp_pcb\""]/["temp_pcb"]):字符串的索引是按字符位置取值,不是JSON键值对的索引,所以也取不到目标值

容错写法(可选)

如果你的数据里可能存在Gateway_Info为空、缺失或者不是合法JSON的情况,可以加个判断避免解析报错:

SELECT 
  c.Evaporator_Temperature,
  CASE 
    WHEN IS_DEFINED(c.Gateway_Info) AND IS_STRING(c.Gateway_Info) THEN JSON.parse(c.Gateway_Info).temp_pcb 
    ELSE null 
  END AS temp_pcb
FROM c

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:34:58