【问题标题】:JQ: How to simplify an object so that the name strings stay in place, and a child object simplifies to a single value?JQ:如何简化对象以使名称字符串保持不变,而子对象简化为单个值?
【发布时间】:2021-08-30 19:52:20
【问题描述】:

假设一个json存在:

{
  "foo": {
     "descr": "this is hard to ask",
     "value": "but it must be easy to answer"
  }
}

而目标是:

cat foo.json | jq '<something>'
{
  "foo": "but it must be easy to answer"
}

有没有办法简单地在 jq 中做到这一点?

【问题讨论】:

  • “我如何搜索我的问题 [没有内联标签]?” - 可能更好地询问元,因为我想它会在短时间内被编辑出来,但你可以搜索像 user:3834415 [jq] 这样的标签。标题不应该重复重复标签是一个相当长期的共识。
  • @Weeble 我已经做了很多年了。
  • @Weeble 不太确定共识是否适用于个别问题,除非共识有能力和意愿编写它们。
  • 也许我应该说“普遍意见”而不是“共识”?我只知道进行此类编辑很常见,并且通常似乎得到了社区的认可。例如。 meta.stackoverflow.com/questions/303606/…meta.stackoverflow.com/questions/253028/… 我对这项政策并没有强烈的感情。我看到了您的评论,并认为您可能会发现搜索提示很有帮助。
  • @Weeble 谢谢我明白了——这里的每个人都经常大吃一惊,我们很在意。我会养成搜索习惯。

标签: shell jq


【解决方案1】:

另一种可能性:

.foo |= .value

【讨论】:

  • 因为它得到了更多的支持,然后是内置的map_values。与map_values相比有什么优势吗?
  • @0stone0 - 功能完全不同:一个像手术刀,另一个像大锤。哪个更合适取决于详细的功能要求。
【解决方案2】:

这里的答案是:

jq 'map_values(.value)'

我是从阅读文档中得到的……这并不理想,但确实得到了回报。

【讨论】:

  • @0stone0 将此添加到 cmets 以便它在此线程上。这是 0stone0 的答案,它展示了地图可以做什么/它是如何工作的,这里是:jq 'to_entries | map({ (.key): .value.value }) | add
猜你喜欢
  • 2017-06-08
  • 2020-05-28
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多