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
相关产品推荐
相关产品推荐

