如何用正则表达式提取ADX中JSON数组指定属性的取值列表?
问题:从ADX集群JSON列中提取RailType字段值
需要从ADX集群某列的以下JSON载荷中提取数据:
[ { "RailType":"HE400", "InstallationDate":"2017-07-19T16:00:00.0000000Z", "CurvePercentage":99.61377338837824 }, { "RailType":"ONEHH", "InstallationDate":"2017-05-21T16:00:00.0000000Z", "CurvePercentage":0.3862266116217716 } ]
当前使用的正则表达式为:
"RailType":(".*?")
但该表达式会匹配整个键值对:
"RailType":"HE400" "RailType":"ONEHH"
实际需要只提取取值:
HE400 ONEHH
已知用正则解析JSON并非最优方案,但受ADX查询要求限制,必须使用正则完成此任务。
解决方案
通过捕获组仅提取目标值,调整后的正则表达式如下:
"RailType":"(.*?)"
在ADX查询中,可配合extract()函数直接提取,示例语法:
your_table | extend RailType = extract(@'"RailType":"(.*?)"', 1, your_json_column)
这里的1指定提取第一个捕获组的内容,也就是"RailType":"之后、下一个双引号之前的文本,正好是需要的RailType取值。
如果JSON数组包含多个对象需要批量提取,可结合mv-expand处理,示例:
your_table | mv-expand parsed_json = parse_json(your_json_column) | extend RailType = extract(@'"RailType":"(.*?)"', 1, tostring(parsed_json))
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

