我已经看到过在以下页面中为其他人提供的建议解决方案,但我无法使用jqplay浏览器shell为我工作:
https://github.com/stedolan/jq/issues/344
https://github.com/stedolan/jq/issues/345
https://github.com/stedolan/jq/issues/1304
鉴于此数据:
{
"api_version": 4,
"error": null,
"result": [
{
"labelId": "ALL",
"labelName": "ALL",
"samples": 30104,
"avgResponseTime": 6.849,
"90line": 8,
"95line": 9,
"99line": 36,
"minResponseTime": 2,
"maxResponseTime": 1951,
"avgLatency": 5.287,
"geoMeanResponseTime": 5.484,
"stDev": 23.765,
"duration": 302,
"avgBytes": 110.224,
"avgThroughput": 99.682,
"medianResponseTime": 5,
"errorsCount": 0,
"errorsRate": 0,
"hasLabelPassedThresholds": null
},
{
"labelId": "3687c89fac2385d28d53b356d4785418",
"labelName": "100b 3600s Cache",
"samples": 7300,
"avgResponseTime": 6.028,
"90line": 7,
"95line": 8,
"99line": 11,
"minResponseTime": 2,
"maxResponseTime": 680,
"avgLatency": 6.021,
"geoMeanResponseTime": 5.203,
"stDev": 16.233,
"duration": 300,
"avgBytes": 16.581,
"avgThroughput": 24.333,
"medianResponseTime": 5,
"errorsCount": 0,
"errorsRate": 0,
"hasLabelPassedThresholds": null
},
{
"labelId": "f88f8ff81bf9b521134637639a0277be",
"labelName": "100b NonCache",
"samples": 729,
"avgResponseTime": 6.143,
"90line": 7,
"95line": 7,
"99line": 9,
"minResponseTime": 3,
"maxResponseTime": 877,
"avgLatency": 6.136,
"geoMeanResponseTime": 4.627,
"stDev": 32.817,
"duration": 295,
"avgBytes": 1.64,
"avgThroughput": 2.471,
"medianResponseTime": 4,
"errorsCount": 0,
"errorsRate": 0,
"hasLabelPassedThresholds": null
}
]
}
我最初尝试过:
[.result[] | {labelName: .labelName, samples: .samples, avgResponseTime: .avgResponseTime, 90line: .90line, 95line: .95line, 99line: .99line, minResponseTime: .minResponseTime, maxResponseTime: .maxResponseTime, avgLatency: .avgLatency, geoMeanResponseTime: .geoMeanResponseTime, stDev: .stDev, durationSeconds: .durationSeconds, avgBytes: .avgBytes, avgThroughput: .avgThroughput, medianResponseTime: .medianResponseTime, errorCount: .errorsCount, errorRate: .errorsRate, hasLabelPassedThresholds: .hasLabelPassedThresholds}]
得到了
jq: error: syntax error, unexpected LITERAL (Unix shell quoting issues?) at <top-level>, line 1:
[.result[] | {labelName: .labelName, samples: .samples, avgResponseTime: .avgResponseTime, 90line: .90line, 95line: .95line, 99line: .99line, minResponseTime: .minResponseTime, maxResponseTime: .maxResponseTime, avgLatency: .avgLatency, geoMeanResponseTime: .geoMeanResponseTime, stDev: .stDev, durationSeconds: .durationSeconds, avgBytes: .avgBytes, avgThroughput: .avgThroughput, medianResponseTime: .medianResponseTime, errorCount: .errorsCount, errorRate: .errorsRate, hasLabelPassedThresholds: .hasLabelPassedThresholds}]
jq: 1 compile error
exit status 3
看看之前链接中提到的类似问题,我试图解决这样的问题:
[.result[] | {labelName: .labelName, samples: .samples, avgResponseTime: .avgResponseTime, 90line: .[“90line”], 95line: .[“95line”], 99line: .[“99line”], minResponseTime: .minResponseTime, maxResponseTime: .maxResponseTime, avgLatency: .avgLatency, geoMeanResponseTime: .geoMeanResponseTime, stDev: .stDev, durationSeconds: .durationSeconds, avgBytes: .avgBytes, avgThroughput: .avgThroughput, medianResponseTime: .medianResponseTime, errorCount: .errorsCount, errorRate: .errorsRate, hasLabelPassedThresholds: .hasLabelPassedThresholds}]
处理以数字字符开头的字段。然而,我仍然会遇到相同的语法错误,所以我无法将我的期望与我在其他解决方案中看到的一致。我只是无法弄清楚我做错了什么,我尝试了各种其他引用或尝试像|没有用。
编辑:回应下面的建议答案:
嗯,我无法得到它。回顾一下:{
"api_version": 4,
"error": null,
"result": [
{
"labelId": "ALL",
"labelName": "ALL",
"samples": 30104,
"avgResponseTime": 6.849,
"90line": 8,
"95line": 9,
"99line": 36,
"minResponseTime": 2,
"maxResponseTime": 1951,
"avgLatency": 5.287,
"geoMeanResponseTime": 5.484,
"stDev": 23.765,
"duration": 302,
"avgBytes": 110.224,
"avgThroughput": 99.682,
"medianResponseTime": 5,
"errorsCount": 0,
"errorsRate": 0,
"hasLabelPassedThresholds": null
}
]
}
jq位:
jq '[.result[] | {labelName: .labelName, samples: .samples, avgResponseTime: .avgResponseTime, minResponseTime: .minResponseTime, maxResponseTime: .maxResponseTime, avgLatency: .avgLatency, geoMeanResponseTime: .geoMeanResponseTime, stDev: .stDev, durationSeconds: .durationSeconds, avgBytes: .avgBytes, avgThroughput: .avgThroughput, medianResponseTime: .medianResponseTime, errorCount: .errorsCount, errorRate: .errorsRate, hasLabelPassedThresholds: .hasLabelPassedThresholds, “90line”: .[“90line”], “95line”: .[“95line”], “99line”: .[“99line”]}]'
返回:
jq:错误:语法错误,意外的INVALID_CHARACTER(Unix shell引用问题?)在第1行:
答案 0 :(得分:1)
您需要引用以数字开头的键的键名,例如
"90line": .["90line"]
另请注意,jq表达式{"90line": .["90line"]}
可以缩写为{"90line"}
。
输入您的信息:
$ jq '[.result[] | {labelName, "90line": .["90line"] } ]' input.json
[
{
"labelName": "ALL",
"90line": 8
},
{
"labelName": "100b 3600s Cache",
"90line": 7
},
{
"labelName": "100b NonCache",
"90line": 7
}
]