如何在键/值对的json数组上使用mvexpand

时间:2017-06-20 21:52:53

标签: azure-application-insights ms-app-analytics

我的appInsights遥测中有一个自定义属性,它是一个键/值对的json数组。我想要做的是预测出那个键/值对,似乎一起使用parsejsonmvexpand是如何实现这一点的;但是,我似乎错过了一些东西。我的表达式的最终结果是一个名为type的列,它是原始json。尝试向表达式添加任何属性会导致空列。

Json编码属性

{
    "aps" : {
        "alert" : "You got your emails.",
        "badge" : 0,
        "sound" : "bingbong.aiff"
    },
}

AIQL

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

更新6/30/17

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

enter image description here

2 个答案:

答案 0 :(得分:4)

我最近遇到了同样的问题。可能您的属性已经是dynamic类型,但其动态String不是数组。 parsejson无法正常工作,因为它会将String转换为dynamic,而非动态转换为其他动态。要解决此问题,我建议您先尝试将您的属性转换为String,然后再次解析。

请尝试以下示例。它可以帮助你,因为它帮助了我:

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

答案 1 :(得分:1)

mvexpand做的是取出你的数组并将其分解为线条,因此每一行都有一个来自数组的项目。 如果你想将每个项目分成列,你需要尝试类似:

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