我在JQ图书馆很新。这是收到的响应:
{"message":"Details fetched successfully","status":1,"details":[{"test":"a","amount":2500.0,"pre":["11","429393","543216","987657"]},{"test":"b","amount":1500.0,"pre":["480855"]},{"test":"c","amount":0.0,"pre":["No data present"]},{"test":"d","amount":1500.0,"pre":["526702"]},{"test":"e","amount":2500.0,"pre":["No data present"]}]}应用JQ过滤器后所需的输出:
{
"msg": "Details fetched successfully",
"status": 1,
"details": {
"a": {
"amount": 2500,
"pre": [
"11",
"429393",
"543216",
"987657"
]
},
"b": {
"amount": 1500,
"pre": [
"480855"
]
},
"c": {
"amount": 0,
"pre": [
"No data present"
]
},
"d": {
"amount": 1500,
"pre": [
"526702"
]
},
"e": {
"amount": 2500,
"pre": [
"No data present"
]
}
}
}我尝试使用下面的JQ过滤器,但我得到的“细节”作为数组,但“细节”是对象的最终输出。
JQ过滤器:
{msg: .message, status: .status, details: [.details[]| { (.test) : {amount: .amount, pre: .pre }}]}发布于 2022-07-20 08:45:12
INDEX可以根据子表达式将数组转换为具有键的对象:
jq '.details |= INDEX(.test)' {
"message": "Details fetched successfully",
"status": 1,
"details": {
"a": {
"test": "a",
"amount": 2500,
"pre": [
"11",
"429393",
"543216",
"987657"
]
},
"b": {
"test": "b",
"amount": 1500,
"pre": [
"480855"
]
},
"c": {
"test": "c",
"amount": 0,
"pre": [
"No data present"
]
},
"d": {
"test": "d",
"amount": 1500,
"pre": [
"526702"
]
},
"e": {
"test": "e",
"amount": 2500,
"pre": [
"No data present"
]
}
}
}要从结果中删除test字段,在结果对象上使用map_values和del:
jq '.details |= (INDEX(.test) | map_values(del(.test)))'{
"message": "Details fetched successfully",
"status": 1,
"details": {
"a": {
"amount": 2500,
"pre": [
"11",
"429393",
"543216",
"987657"
]
},
"b": {
"amount": 1500,
"pre": [
"480855"
]
},
"c": {
"amount": 0,
"pre": [
"No data present"
]
},
"d": {
"amount": 1500,
"pre": [
"526702"
]
},
"e": {
"amount": 2500,
"pre": [
"No data present"
]
}
}
}https://stackoverflow.com/questions/73048140
复制相似问题