gpt4 book ai didi

json - 复杂的 jq 过滤器

转载 作者:行者123 更新时间:2023-12-04 23:21:33 25 4
gpt4 key购买 nike

免责声明:这不是家庭作业,这是我正在为工作做的事情的 sanitizer 版本。

我正在尝试使用 jq 过滤一些 json 数据,并希望为过滤器中的每个匹配记录返回一个对象。这是我正在做的事情的文本描述:“给定一个包含学生列表、一些个人信息和他们的成绩的 JSON 对象,为每个在CSC101。”

这是测试 JSON 对象(程序输入):

{
"students": [
{"name": "John", "age": "19", "gender": "m", "from": "Tampa, FL", "cum_gpa": "3.83", "semesters": [
{"name": "201302", "gpa": "3.67", "grades": {"CSC101": "A", "MAT101": "A", "PSY101": "B"}},
{"name": "201401", "gpa": "4.00", "grades": {"CSC201": "A", "MAT201": "A", "HIS101": "A"}}
]},
{"name": "Mary", "age": "20", "gender": "f", "from": "Chicago, IL", "cum_gpa": "3.50", "semesters": [
{"name": "201302", "gpa": "4.00", "grades": {"CSC101": "A", "MAT101": "A", "ECO101": "A"}},
{"name": "201401", "gpa": "3.00", "grades": {"CSC201": "B", "MAT201": "B", "HUM101": "B"}}
]},
{"name": "Dan", "age": "20", "gender": "m", "from": "Seattle, WA", "cum_gpa": "3.33", "semesters": [
{"name": "201302", "gpa": "3.33", "grades": {"CHE101": "B", "MAT101": "A", "PSY101": "B"}},
{"name": "201401", "gpa": "3.33", "grades": {"CHE201": "A", "MAT201": "A", "HUM101": "C"}}
]}
]
}

这是我当前的过滤器表达式和结果:
cat test.json |jq -c '.students[]|select(.semesters[].grades.CSC101 == "A")|{name: .name, age: .age, gpa: .cum_gpa, CSC101: .semesters[].grades.CSC101}' 
{"name":"John","age":"19","gpa":"3.83","CSC101":"A"}
{"name":"John","age":"19","gpa":"3.83","CSC101":null}
{"name":"Mary","age":"20","gpa":"3.50","CSC101":"A"}
{"name":"Mary","age":"20","gpa":"3.50","CSC101":null}

它有点工作,但它会产生额外的输出。我只希望它产生有 CSC101 条目的学期,而是返回所有参加 CSC101 的学生的所有学期。有什么建议?

最佳答案

试试这个过滤器:

.students | map(
{
name,
age,
gpa: .cum_gpa,
CSC101: .semesters | map(.grades) | add | .CSC101
}
|
select(.CSC101 == "A")
)

这个想法是合并每个学生所有学期的所有成绩并获取 CSC101年级。然后筛选出成绩为 A 的学生。

这导致:
[
{
"name": "John",
"age": "19",
"gpa": "3.83",
"CSC101": "A"
},
{
"name": "Mary",
"age": "20",
"gpa": "3.50",
"CSC101": "A"
}
]

关于json - 复杂的 jq 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24875419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com