Azure Log Analytics解析json

问题描述

我有一个查询,结果显示为几列但其中一列,我正在解析JSON以检索对象值,但是其中有多个条目,我希望JSON中的每个条目都可以在循环中显示显示。 / p>

下面是查询

let forEach_table = AzureDiagnostics
| where Parameters_LOAD_GROUP_s contains 'LOAD(AUTO)';
let ParentPlId = '';
let ParentPlName = '';
let commonKey = '';
forEach_table
| where Category == 'PipelineRuns'
| extend pplId = parse_json(Predecessors_s)[0].PipelineRunId,pplName = parse_json(Predecessors_s)[0].PipelineName
| extend dbMapName = tostring(parse_json(Parameters_getMetadataList_s)[0].dbMapName)
| summarize count(runId_g) by Resource,Status = status_s,Name=pipelineName_s,Loadgroup = Parameters_LOAD_GROUP_s,dbMapName,Parameters_LOAD_GROUP_s,Parameters_getMetadataList_s,pipelineName_s,Category,CorrelationId,start_t,end_t,TimeGenerated
| project ParentPL_ID = ParentPlId,ParentPL_Name = ParentPlName,LoadGroup_Name = Loadgroup,Map_Name = dbMapName,Status,Metadata = Parameters_getMetadataList_s,end_t
| project-away ParentPL_ID,ParentPL_Name,CorrelationId

在上面的代码中,

extend dbMapName = tostring(parse_json(Parameters_getMetadataList_s)[0].dbMapName)

我将认检索第0个元素,但我想按顺序检索所有元素,有人可以建议我如何实现这一点。

解决方法

bag_keys()正是您所需要的。

例如,看一下此查询:

datatable(myjson: dynamic) [
   dynamic({"a": 123,"b": 234,"c": 345}),dynamic({"dd": 123,"ee": 234,"ff": 345})
]
| project keys = bag_keys(myjson)

其输出是:

|---------|
| keys    |
|---------|
| [       |
|   "a",|
|   "b",|
|   "c"   |
| ]       |
|---------|
| [       |
|   "dd",|
|   "ee",|
|   "ff"  |
| ]       |
|---------|

如果要将每个键放在单独的行中,请使用mv-expand,如下所示:

datatable(myjson: dynamic) [
   dynamic({"a": 123,"ff": 345})
]
| project keys = bag_keys(myjson)
| mv-expand keys

此查询的输出将是:

|------|
| keys |
|------|
| a    |
| b    |
| c    |
| dd   |
| ee   |
| ff   |
|------|
,

extend和mv-expand方法有助于解决这种情况。

解决方案: 扩展行= parse_json(Parameters_getMetadataList_s) | mv展开行 |项目Parameters_LOAD_GROUP_s,行