Json jq筛选-无法索引字符串为“Score”的数组
我试图找到一个人的名字谁有一个主题和它的分数。 但我得到的是索引数组。 此问题与Stackoverflow上的其他问题不同,因为它对参数抛出错误,该参数不在[]中,而在{}Json jq筛选-无法索引字符串为“Score”的数组,json,jq,Json,Jq,我试图找到一个人的名字谁有一个主题和它的分数。 但我得到的是索引数组。 此问题与Stackoverflow上的其他问题不同,因为它对参数抛出错误,该参数不在[]中,而在{} jq -r '.[] | select(.result."*value*".Score.English) | {Name: .result."*value*".name, Subject: .result."*value*".Score.English} | @text' test.txt | sed 's/^{\|}$//
jq -r '.[] | select(.result."*value*".Score.English) | {Name: .result."*value*".name, Subject: .result."*value*".Score.English} | @text' test.txt | sed 's/^{\|}$//g; s/,/\n/'
输入JSON文件
[{
"host": "testserver",
"hostclass": "Unknown",
"result": {
"*value*": [
{
"sessionId": "000001",
"name": "ABC",
"Age": "21",
"Score": {
"English": "A+",
"Mathematics": "B-",
"String Theory": "C+"
}
},
{
"sessionId": "000001",
"name": "CDE",
"Age": "21",
"Score": {
"English": "A-",
"German": "B-",
"French": "C+"
}
},
{
"sessionId": "000001",
"name": "EFG",
"Age": "21",
"Score": {
}
},
{
"sessionId": "000001",
"name": "XYZ",
"Age": "21"
}]
}
}]
输出:
Name: ABC
Subject : A+
Name: CDE
Subject : A-
错误:
jq: error (at test.txt:39): Cannot index array with string "Score"
如何修复此错误
您需要展开数组以访问其中的元素,
你根本不需要sed。
EFG分数的长度为0,这可能没有帮助:
"sessionId": "000001",
"name": "EFG",
"Age": "21",
"Score": {}
因此,在尝试评估时,它会阻塞:
Subject: .result."*value*".Score.English
*value*是一个数组。所以.result..value..Score总是会失败。您似乎想要该数组中包含的对象的Score属性。结果.*值*[]分。这将修复错误,但不会使其正确。
Subject: .result."*value*".Score.English