Hec*_*407 2 json key filter jq
在 jq 中,如何确保 ak,v 仅在被检查的对象中存在时才创建?例如,假设我有一个对象,如:
{
"student":{
"name": "george",
"age" : "15",
"quote": "Hello I am George"
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做是cat text.txt | jq '{name: .student.name, quote: .student.quote}'
为了创造:
{
"name": "george",
"quote": "Hello I am George"
}
Run Code Online (Sandbox Code Playgroud)
但是,有些条目不完整,我不想写一个空的K,V。假设我得到:
{
"student":{
"name": "Shirley"
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的当前 jq 这将创建:
{
"name": "Shirley",
"quote": " ",
}
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉 jq 只在'quote'
它存在(即不为空)时才创建密钥?或者更一般地说,只有当它们存在于被检查的对象中时才创建所有键。
这是对象添加非常方便的地方,特别是因为$obj + null
产量$obj
(如果$obj
是 JSON 对象):
.student | {name} + if has("quote") then {quote} else null end
Run Code Online (Sandbox Code Playgroud)
或等效地:
def maybe(k): if has(k) then {(k): .[k]} else null end;
.student | {name} + maybe("quote")
Run Code Online (Sandbox Code Playgroud)
一种略有不同的方法,语义略有不同,是:
.student | {name} + ((select(.quote) | {quote}) // null)
Run Code Online (Sandbox Code Playgroud)
当然,其他变化也是可能的。
归档时间: |
|
查看次数: |
4000 次 |
最近记录: |