我正在尝试更改它,以便当 CrashTested 为 false
时,它输出 no,当 true
时,则输出 yes
这是 json:
{
"Cars": [
{ "Name": "Toyota Prius",
"ID": 1,
"CrashTested": "false"
},
{ "Name": "Honda Accord",
"ID": 2,
"CrashTested": "true"
},
{ "Name": "VW Beetle",
"ID": 3,
"CrashTested": "false"
},
{ "Name": "Acura TL",
"ID": 4,
"CrashTested": "true"
},
{ "Name": "Dodge Charger",
"ID": 5,
"CrashTested": "false"
},
{ "Name": "Ford Focus",
"ID": 6,
"CrashTested": "true"
}
]
}
我尝试了以下方法:
$ jq -r '.Cars[] | .Name, .ID, map(if .CrashTested == "true" then "yes" elif .CrashTested == "false" then "no" else "unknown" end)' < cars.json
Toyota Prius
1
jq: error (at <stdin>:31): Cannot index string with string "CrashTested"
我正在尝试获得以下输出:
"Toyota Prius"
1
"no"
"Honda Accord"
2
"yes"
...
我在jq版本jq-1.5-1
我应该使用 map() 还是换一种方式?
最佳答案
如果您删除 map
,那么您将获得指定值的流。不过,按照以下几行写一些东西可能更有意义:
.Cars[]
| [.Name, .ID, (if .CrashTested == "true" then "yes" elif .CrashTested == "false" then "no" else "unknown" end)]
| @csv
或:
def yn:
if . == true or . == "true" then "yes"
elif . == false or . == "false" then "no"
else "unknown"
end;
.Cars[]
| [.Name, .ID, (.CrashTested | yn) ]
关于linux - 如何使用 if else 重写 jq 中的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57564439/