如何在 key/value 对的 json 数组上使用 mvexpand

How to use mvexpand on an json array of key/value pairs

我的 appInsights 遥测中有一个自定义 属性,它是 json 对 key/value 数组。我想做的是预测出 key/value 对,似乎一起使用 parsejson and mvexpand 是实现这一目标的方法;但是,我似乎遗漏了一些东西。我的表达式的最终结果是一个名为 type 的列,它是原始 json。尝试向表达式添加任何 属性 会导致空列。

Json编码属性

[{"type":"text/xml","count":1}]

AIQL

requests 
 | project customDimensions 
 | extend type=parsejson(customDimensions.['Media Types'])
 | mvexpand bagexpansion=array type 

2017 年 6 月 30 日更新

为了回答 EranG 的问题,将属性投影为列时我的请求输出如下所示。

mvexpand 所做的是获取您的数组并将其分解为行,因此每一行都将包含数组中的一个项目。 如果您想将每个项目分解为列,您需要尝试类似的方法:

requests 
| project customDimensions 
| extend type=parsejson(customDimensions.['Media Types'])
| mvexpand bagexpansion=array type 
| project type = type.type, count_ = type["count"]

我最近遇到了同样的问题。可能您的 属性 已经是 dynamic 类型,但它的动态 String 不是数组。 parsejson 不起作用,因为它将 String 转换为 dynamic,而不是动态转换为另一个动态。要解决此问题,我建议您先尝试将 属性 转换为 String,然后再次解析它。

请尝试以下示例。它可能对您有所帮助,因为它对我有帮助:

requests 
| project customDimensions 
| extend type=parsejson(tostring(customDimensions.['Media Types']))
| mvexpand type
| project type.type, type.['count']