【问题标题】:select from object stream given array of keys从给定键数组的对象流中选择
【发布时间】:2019-03-05 19:16:22
【问题描述】:

如何在 jq 中从键数组中选择一些字段?不是常量,而是键列表:

| $fields = ["name", "url"]
| . [$fields]

【问题讨论】:

  • 人们可能不知道 jq 是什么:stedolan.github.io/jq 一个链接很好
  • 请提供示例输入和示例预期输出,这将有助于回答您的问题
  • @Vetras - jq 标签就足够了。

标签: json key jq


【解决方案1】:

如果您只是想要数组中顶级对象的字段,您可以正常索引:

$ jq --arg fields 'name,url' '.[$fields | split(",")[]]' input.json

一般来说,如果您需要任意路径的值,最好输入为路径:

$ jq --argjson paths '[["foo"],["foo","bar"]]' 'getpath($paths[])' input.json

【讨论】:

    【解决方案2】:

    对于值,您可以使用getpath:

    $ echo '{"a":1,"b":2,"c":3}' |
      jq --argjson keys '["a","c"]' '$keys[] as $key | getpath([$key])'
    1
    3
    

    【讨论】:

      【解决方案3】:

      我想会是这样的:

      $ jq --argjson paths '[["foo"],["foo","bar"]]' 'getpath($paths[])' input.json
      

      【讨论】:

        【解决方案4】:

        (没有样本输入/输出,这是我能猜到的最好的)

        也许是这样的:

        <<input>> | jq '.[] | {foo: .name, bar: .url}'
        

        这有什么帮助吗? https://stedolan.github.io/jq/tutorial/

        【讨论】:

          猜你喜欢
          • 2020-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-05
          相关资源
          最近更新 更多