jq 筛选 - 无法使用字符串"Score"数组编制索引



我试图找到具有主题并得分的人。但是我得到了索引阵列。这个问题与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"

如何解决此错误?

  1. 您需要扩展数组以访问它们中的元素,
  2. 您根本不需要SED。
$ jq -r '.[].result."*value*"[] | select(.Score.English) | "Name: (.name)", "Subject: (.Score.English)"' file
Name: ABC
Subject: A+
Name: CDE
Subject: A-

efg 得分长度为0,可能无济于事:

"sessionId": "000001",
"name": "EFG",
"Age": "21",
"Score": {}

因此,它在尝试评估时会窒息:

Subject: .result."*value*".Score.English 

最新更新