在Unix上运行一个shell脚本,该脚本通过一系列JSON对象,如下所示,收集<init>() @ JSONInputData.java:82
之类的值。还有其他对象需要检索其他值。
是否有一个更好的选择,而不是为"STACKTRACE_LINE",\n\s*.*
加注,然后将结果分开?
inb4:“将X包添加到操作系统”。需要一般地运行。
. . .
"probableStartLocationView" : {
"lines" : [ {
"fragments" : [ {
"type" : "STACKTRACE_LINE",
"value" : "<init>() @ JSONInputData.java:82"
} ],
"text" : "<init>() @ JSONInputData.java:82"
} ],
"nested" : false
},
. . . .
如果我在以下一系列对象中寻找"description" : "Dangerous Data Received"
该怎么知道我需要知道它与事件12345相关联而不是与同一文件中列出的其他事件相关联?
. . .
"events" : [ {
"id" : "12345",
"important" : true,
"type" : "Creation",
"description" : "Dangerous Data Received",
. . .
答案 0 :(得分:1)
有没有比选择“STACKTRACE_LINE”更好的选项,\ n \ s *。*然后拆分结果?
是。使用jq
过滤和提取有趣的部分。
示例1,给定此JSON:
{
"probableStartLocationView": {
"lines": [
{
"fragments": [
{
"type": "STACKTRACE_LINE",
"value": "<init>() @ JSONInputData.java:82"
}
],
"text": "<init>() @ JSONInputData.java:82"
}
],
"nested": false
}
}
提取value
type
为“STACKTRACE_LINE”:
jq -r '.probableStartLocationView.lines[] | .fragments[] | select(.type == "STACKTRACE_LINE") | .value' file.json
这将每value
生成一行。
示例2,给定此JSON:
{
"events": [
{
"id": "12345",
"important": true,
"type": "Creation",
"description": "Dangerous Data Received"
}
]
}
提取id
description
以“危险”开头的地方:
jq -r '.events[] | select(.description | startswith("Dangerous")) | .id'
等等。
有关更多示例和功能,请参阅jq manual。
关于使用jq
的Stack Overflow还有很多问题,
这应该可以帮助您找到过滤和提取相关部分的正确组合。