首页 > 解决方案 > Kusto KQL 引用 JSON 数组中的第一个对象

问题描述

我需要在 Microsoft Defender ATP 中使用 Kusto KQL 获取 json 数组中第一个条目的值。

数据格式看起来像这样(匿名),我想要“用户名”的值:

[{"UserName":"xyz","DomainName":"xyz","Sid":"xyz"}]

如何拆分或以任何其他方式获取“用户名”值?

标签: jsonazure-data-explorerkql

解决方案


在 WDATP/MSTAP 中,对于“LoggedOnUsers”类型的数组,您希望将“mv-expand”(多值扩展)与“parsejson”结合使用。

"parsejson" 会将字符串转换为 JSON,mv-expand 会将其扩展为 LoggedOnUsers.Username、LoggedOnUsers.DomainName 和 LoggedOnUsers.Sid​​:

DeviceInfo 
| mv-expand parsejson(LoggedOnUsers)
| project DeviceName, LoggedOnUsers.UserName, LoggedOnUsers.DomainName

请记住,如果打包字段有多个条目(如 DeviceNetworkInfo 的 IPAddresses 字段经常这样做),则整个行将在每个条目中扩展一次 - 因此,在“IPAddresses”中有 3 个条目的机器的一行将被复制 3 次,其中每个不同的 IpAddresses 扩展:

DeviceNetworkInfo 
| where Timestamp > ago(1h)
| mv-expand parsejson(IPAddresses)
| project DeviceName, IPAddresses.IPAddress

推荐阅读