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