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

如何指定JSON路径提取ModbusSerial.Port_1.COM3.Power数值

提取MTConnectStreams JSON中指定字段的值

核心路径修正

你之前的代码路径漏了DeviceStream层级,正确的顶层路径应该是data12_json['MTConnectStreams']['Streams']['DeviceStream']['ComponentStream'],接下来分两种方式提取目标值:

方式一:固定索引快速提取(结构稳定时用)

如果能确定ModbusSerial.Port_1.COM3对应的是ComponentStream数组的第二个元素(索引为1),可以直接定位:

# 定位到COM3组件
com3_component = data12_json['MTConnectStreams']['Streams']['DeviceStream']['ComponentStream'][1]
# 遍历Events找Power字段
for item in com3_component['Events']['Other']:
    if item['@dataItemId'] == 'ModbusSerial.Port_1.COM3.Power':
        power_value = item['#text']
        print(power_value)  # 输出结果:60.85923
        break

方式二:遍历匹配提取(结构可能变化时用)

如果不确定数组索引,通过匹配@componentId来定位组件,兼容性更强:

# 遍历所有组件
for component in data12_json['MTConnectStreams']['Streams']['DeviceStream']['ComponentStream']:
    if component['@componentId'] == 'ModbusSerial.Port_1.COM3':
        # 在当前组件的Events里找Power字段
        for item in component['Events']['Other']:
            if item['@dataItemId'] == 'ModbusSerial.Port_1.COM3.Power':
                power_value = item['#text']
                print(power_value)  # 输出结果:60.85923
                break
        break

关键注意点

  • 目标字段Power属于组件的Events->Other数组,不是Samples,别找错层级;
  • 所有带@和#的键名要完整写对,比如@dataItemId、#text,不能漏符号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:44:16