问题描述
我有一个查询,结果显示为几列但其中一列,我正在解析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,行