我使用 Instana 在我的网站上提供查看统计信息,每个每日文件如下所示:
{
"items" : [ {
"name" : "page1.htm",
"earliestTimestamp" : 1675222177839,
"cursor" : {
"@class" : ".IngestionOffsetCursor",
"ingestionTime" : 1675292168217,
"offset" : 1
},
"metrics" : {
"uniqueSessions.distinct_count" : [ [ 1675292400000, 4.0 ] ]
}
}, {
"name" : "page2.htm",
"earliestTimestamp" : 1675260035165,
"cursor" : {
"@class" : ".IngestionOffsetCursor",
"ingestionTime" : 1675292168217,
"offset" : 2
},
"metrics" : {
"uniqueSessions.distinct_count" : [ [ 1675292400000, 1.0 ] ]
}
}, {
"name" : "page3.htm",
"earliestTimestamp" : 1675228447118,
"cursor" : {
"@class" : ".IngestionOffsetCursor",
"ingestionTime" : 1675292168217,
"offset" : 3
},
"metrics" : {
"uniqueSessions.distinct_count" : [ [ 1675292400000, 7.0 ] ]
}
} ],
"canLoadMore" : false,
"totalHits" : 12,
"totalRepresentedItemCount" : 12,
"totalRetainedItemCount" : 12,
"adjustedTimeframe" : {
"windowSize" : 86400000,
"to" : 1675292400000
}
}
这些日常文件应在过滤必要信息后合并为一个 json:
网址(来自名称)
日期(“uniqueSessions.distinct_count”中的第一个值)
页面访问次数:(“uniqueSessions.distinct_count”中的第二个值)
重要的是,它必须在 CMD 中完成,因为我必须使用批处理文件,因为目标用户不允许运行 PowerShell 脚本,也无法访问任何其他 CL 工具。
到目前为止,我设法使用以下方法将文件归结为所需的数据元素作为单独的 JSON 对象:
type *.json | jq ".items[] | {url: .name, date: .metrics[][0][0], load: .metrics[][0][1]}"
结果如下:
{
"url": "page1.htm",
"date": 1675292400000,
"load": 4
}
{
"url": "page1.htm",
"date": 1675292400000,
"load": 1
}
{
"url": "page1.htm",
"date": 1675292400000,
"load": 7
}
但是,如果我尝试将其括在方括号中(如教程所示)以获得有效的 JSON,我会得到一个文件,其中包含一堆数组,其开始和结束位置与原始文件中的位置相同。
我做了作业,并且意识到这一点:使用 jq 过滤器将多个 json 文件组合成一个 json 文件实际上,在询问之前我已经玩了一段时间了。我在想如果我可以再次添加大括号和根节点,它会有所帮助,但我还没有找到一种 JQ 不会失败的方法,该错误很可能来自 windows cmd 的引号使用。
如何将其制作成一个 JSON,而不是与源文件一样多的数组?谢谢!