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

如何在KQL中从JSON结构里的字符串数组提取首个元素?

问题分析与解决

存储的JSON结构

你的列中存储的JSON数据实际格式如下:

{"Attributes": "[\"AnAttribute\"]",
  "WorkItems": "[\"674746\"]",
  "AuthorAliases": "[\"AnAlias\"]"
}

你尝试的查询语句

let t = datatable (data:string) [
   @'{"Attributes": "[\"AnAttribute\"]","WorkItems": "[\"674746\"]","AuthorAliases": "[\"AnAlias\"]"}'
];
t
| extend asDyn = todynamic(data)
| extend WorkItems = asDyn["WorkItems"]
| extend WorkItem = WorkItems[0]

执行结果

dataasDynWorkItemsWorkItem
{"Attributes": "["AnAttribute"]","WorkItems": "["674746"]","AuthorAliases": "["AnAlias"]"}{"Attributes": "["AnAttribute"]", "WorkItems": "["674746"]", "AuthorAliases": "["AnAlias"]"}["674746"]

问题出在哪

你误解了JSON字段的实际类型:WorkItems这类字段的值不是数组,是被双引号包裹的字符串。虽然外观像数组,但经过todynamic(data)解析后,它依然是字符串类型,自然无法通过[0]语法获取数组元素(KQL中对字符串使用该语法不会返回有效内容)。

正确的查询方法

需要先把WorkItems对应的字符串再次用todynamic()转换为真正的动态数组,之后再提取首个元素:

let t = datatable (data:string) [
   @'{"Attributes": "[\"AnAttribute\"]","WorkItems": "[\"674746\"]","AuthorAliases": "[\"AnAlias\"]"}'
];
t
| extend asDyn = todynamic(data)
| extend WorkItemsStr = asDyn["WorkItems"]
| extend WorkItemsArr = todynamic(WorkItemsStr)
| extend WorkItem = WorkItemsArr[0]

正确执行结果

dataasDynWorkItemsStrWorkItemsArrWorkItem
{"Attributes": "["AnAttribute"]","WorkItems": "["674746"]","AuthorAliases": "["AnAlias"]"}{"Attributes": "["AnAttribute"]", "WorkItems": "["674746"]", "AuthorAliases": "["AnAlias"]"}["674746"]["674746"]674746

内容的提问来源于stack exchange,提问作者Anders Sewerin Johansen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:10:28