AWS CLI查询AWS IoT设备影子时返回null的问题排查
问题原因与解决方案
你的问题出在AWS CLI对get-thing-shadow命令的响应结构处理上:
- 当你直接指定输出文件(比如
shadow.json)时,CLI会将设备影子的原始JSON内容(包含state、metadata等字段)写入文件,这也是你在shadow.json中看到的内容。 - 但当你使用
--query参数时,CLI是对完整的API响应结构进行查询,而这个响应的顶层字段是payload——设备影子的JSON内容被包裹在这个字段中(且是字符串格式),而非直接作为顶层结构存在。
你在线测试JMESPath时用的是shadow.json里的纯影子内容,所以state.desired有效;但CLI的查询对象是包含payload的完整响应,自然找不到顶层的state字段,返回null。
解决方法
方法1:使用JMESPath的from_json函数解析payload字符串
直接在--query中先将payload字段的字符串解析为JSON对象,再查询目标字段:
aws iot-data get-thing-shadow --thing-name 1234567 --query 'from_json(payload).state.desired'
方法2:先保存影子文件,再用工具查询
如果你习惯先保存完整影子,可结合jq工具过滤内容:
# 先保存纯影子内容到文件(注意不要加--output=json) aws iot-data get-thing-shadow --thing-name 1234567 shadow.json # 用jq查询目标字段 jq '.state.desired' shadow.json
注意事项
- 避免同时使用
--output=json和指定输出文件,这会导致输出的是包含payload的API响应结构,而非纯影子内容。 - 你的AWS CLI版本2.10.0完全支持
from_json函数,无需升级。
内容的提问来源于stack exchange,提问作者Erik Finnman
相关产品推荐
相关产品推荐

