将多行合并到json格式的变量中

问题描述 投票:0回答:1

我正在尝试使用一个 json 文件,该文件作为一个包含两列的表引入到数据资源管理器中:FileLineContent 和 LineNumber(还有 2 列,但对于我的目的来说它们并不有趣)。我使用 Kusto 获取文件的内容并对其进行操作。表格如下所示:

LineNumber FileLineContent
1          [
2             {
3               "atr1": "value11",
4               "atr2": "value12",
5               "atr3": {
6                   atr31": "value131",
7                   atr32": "value132"
8                },
9               "atr4": {
10                  "atr41": {
11                     "atr411": [
12                              "value14111",
13                              "value14112"
14                      ]
15                   }
16                   }
17             },
18             {
19               "atr1": "value21",
20               "atr2": "value22",
21               "atr3": {
22                   atr31": "value231",
23                   atr32": "value232"
24               },
25               "atr4": {
26                  "atr41": {
27                     "atr411": [
28                              "value24111",
29                              "value24112"
30                      ]
31                   }
32                   }
33             }
34            ]

总结一下:我们有一个 json 元素数组,具有很深的层次结构(最多 5 个),其格式对于人眼来说是“很好的方式”,但对于 kusto 的眼睛来说却不太好。 我需要使用这些元素并显示多个属性的多个值。我很难构建可以解析为 json 的原始变量。

我尝试手动构建具有类似结构的 json,我注意到我必须消除所有空格,并且必须转义大括号内的所有引号。 它必须看起来像这样:

let json = '{"atr1":"value11","atr2":"value12","atr3":"{\\"atr31\\":\\"value131\\",\\"atr32\\":\\"value132\\",\\"atr33\\":\\"value133\\",\\"atr34\\":\\"value134\\",\\"atr35\\":\\"value135\\"}"}';

然后我可以使用

parse_json()
显示属性的值。

print parse_json(tostring(parse_json(json).atr3)).atr31

但这当然不是一个 json 数组。我构建它只是为了看看 kusto 对它的期望如何。

总而言之,我的问题是:如何将上面的表格转换为可以解析为 json 的内容? 我尝试了一些聚合函数,但没有给出令人满意的结果。

谢谢!

json kql azure-data-explorer
1个回答
0
投票

这就是我用来解决问题的方法。将其添加到此处以防其他人需要它。该查询假设数据以上述格式存储在 JsonTable 中:

let RawDataFromTable = 
['JsonTable']
| order by LineNumber asc
| summarize raw = strcat_array(make_list(FileLineContent), "\r\n") by FileName;
 RawDataFromTable 
 | project json = parse_json(tostring(raw))
 | mv-expand json
 | evaluate bag_unpack(json)
 | evaluate bag_unpack(atr3,'atr3_') //this line expands the attributes under atr3 under different columns called atr3_atr31, atr3_atr32. 

然后可以根据需要的数据修改查询。

© www.soinside.com 2019 - 2024. All rights reserved.