Json jq筛选-无法索引字符串为“Score”的数组

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/^{\|}$//

我试图找到一个人的名字谁有一个主题和它的分数。 但我得到的是索引数组。 此问题与Stackoverflow上的其他问题不同,因为它对参数抛出错误,该参数不在[]中,而在{}

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