首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jq筛选-无法索引字符串为"Score“的数组

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

Stack Overflow用户
提问于 2019-05-08 00:55:09
回答 2查看 327关注 0票数 0

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

代码语言:javascript
复制
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文件

代码语言:javascript
复制
[{
    "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"
            }]
   }
}]

输出:

代码语言:javascript
复制
Name: ABC
Subject : A+
Name: CDE
Subject : A-

错误:

代码语言:javascript
复制
jq: error (at test.txt:39): Cannot index array with string "Score"

如何修复此错误?

EN

回答 2

Stack Overflow用户

发布于 2019-05-08 01:23:29

  1. 您需要展开数组才能访问其中的元素,
  2. 您根本不需要sed。

代码语言:javascript
复制
$ jq -r '.[].result."*value*"[] | select(.Score.English) | "Name: \(.name)", "Subject: \(.Score.English)"' file
Name: ABC
Subject: A+
Name: CDE
Subject: A-
票数 1
EN

Stack Overflow用户

发布于 2019-05-08 01:26:56

EFG Score的长度为0,这可能没有帮助:

代码语言:javascript
复制
"sessionId": "000001",
"name": "EFG",
"Age": "21",
"Score": {}

因此,当尝试评估时,它会卡住:

代码语言:javascript
复制
Subject: .result."*value*".Score.English 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56027278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档