通过数组搜索
Searching through an array
尝试学习如何在 jq 脚本中思考。
鉴于此数据:
{
"characters": [
{ "First": "Fred", "Last": "Weasley" },
{ "First": "George", "Last": "Weasley" },
{ "First": "Hermione", "Last": "Granger" },
{ "First": "Ron", "Last": "Weasley" },
{ "First": "Hagrid" },
{ "First": "Draco", "Last": "Malfoy" },
{ "First": "Molly", "Last": "Weasley" },
{ "First": "Voldemort" },
{ "First": "Lucius", "Last": "Malfoy" }
]
}
找出所有姓氏与“罗恩”相同的角色。不,你还不知道他的姓氏。
您有一个名为“字符”的对象数组,每个对象都包含一个“第一个”和“最后一个”变量。
现在得到第一个。 Go characters[0].first 会 return。 “弗雷德”
或者 characters.[3].last 会 return "Weasley"
请注意,数组中的第一个条目是通过索引 0 获取的。
有道理吗?
找到您要查找的姓氏并将其保存在变量中,然后相应地更新 characters
数组:
jq '
(.characters[] | select(.First == "Ron").Last) as $last
| .characters |= map(select(.Last == $last))
'
{
"characters": [
{
"First": "Fred",
"Last": "Weasley"
},
{
"First": "George",
"Last": "Weasley"
},
{
"First": "Ron",
"Last": "Weasley"
},
{
"First": "Molly",
"Last": "Weasley"
}
]
}
如果您想使用动态名字进行调用,请使用参数变量提供它:
jq --arg first "Ron" '
(.characters[] | select(.First == $first).Last) as $last
| .characters |= map(select(.Last == $last))
'
尝试学习如何在 jq 脚本中思考。
鉴于此数据:
{
"characters": [
{ "First": "Fred", "Last": "Weasley" },
{ "First": "George", "Last": "Weasley" },
{ "First": "Hermione", "Last": "Granger" },
{ "First": "Ron", "Last": "Weasley" },
{ "First": "Hagrid" },
{ "First": "Draco", "Last": "Malfoy" },
{ "First": "Molly", "Last": "Weasley" },
{ "First": "Voldemort" },
{ "First": "Lucius", "Last": "Malfoy" }
]
}
找出所有姓氏与“罗恩”相同的角色。不,你还不知道他的姓氏。
您有一个名为“字符”的对象数组,每个对象都包含一个“第一个”和“最后一个”变量。 现在得到第一个。 Go characters[0].first 会 return。 “弗雷德” 或者 characters.[3].last 会 return "Weasley" 请注意,数组中的第一个条目是通过索引 0 获取的。 有道理吗?
找到您要查找的姓氏并将其保存在变量中,然后相应地更新 characters
数组:
jq '
(.characters[] | select(.First == "Ron").Last) as $last
| .characters |= map(select(.Last == $last))
'
{
"characters": [
{
"First": "Fred",
"Last": "Weasley"
},
{
"First": "George",
"Last": "Weasley"
},
{
"First": "Ron",
"Last": "Weasley"
},
{
"First": "Molly",
"Last": "Weasley"
}
]
}
如果您想使用动态名字进行调用,请使用参数变量提供它:
jq --arg first "Ron" '
(.characters[] | select(.First == $first).Last) as $last
| .characters |= map(select(.Last == $last))
'