如何使用jq输出包含键名的us_rate对象?
用jq提取嵌套对象时保留键名的方法
嘿,我刚好知道怎么解决这个问题!你现在需要提取us_rate对象同时保留它的键名,对吧?咱们一步步来:
首先先确认你的原始JSON内容:
{ "shipping": { "local": true, "us": true, "us_rate": { "amount": "0.00", "currency": "USD", "symbol": "$" } } }
你之前用cat input.json | jq .shipping.us_rate只能得到us_rate对应的值,而要保留键名的完整结构,有两种简单好用的方法:
方法一:手动构造目标对象
利用jq的对象构造语法,直接指定要保留的键名,并把对应层级的值赋给它:
cat input.json | jq '{us_rate: .shipping.us_rate}'
执行这个命令后,就能得到你想要的输出:
{ "us_rate": { "amount": "0.00", "currency": "USD", "symbol": "$" } }
方法二:从父对象中直接选取指定键
如果你已经定位到shipping这个父对象层级,也可以直接选取里面的us_rate键,这样jq会自动保留键名:
cat input.json | jq '.shipping | {us_rate}'
这个方法和方法一的效果完全一致,好处是如果后续需要调整父层级的路径,修改起来会更灵活。
要是你遇到键名是动态的场景(比如需要通过变量指定要提取的键),还可以用这个进阶写法:
cat input.json | jq --arg key "us_rate" '.shipping | {($key): .[$key]}'
不过针对你当前的需求,前面两种基础方法就完全够用啦。
内容的提问来源于stack exchange,提问作者BMW
相关产品推荐
相关产品推荐

