【问题标题】:Print the first value without knowing the key在不知道键的情况下打印第一个值
【发布时间】:2020-12-25 15:41:58
【问题描述】:

我有一个 JSON 值

{
    "RandomKey1": "3.1.44.0",
    "Common": {
        "Services": "3.50.103.0",
        "Common": "3.50.103.0"
    }
}

我想获取RandomKey1 的值。你可能已经猜到了,每次加载页面时key的名字都会改变,所以我需要获取第0个key的值。保证在第0位

我期待这至少有一些结果

cat result.json | jq -r '.[0]'

但我得到了错误

jq: error (at <stdin>:0): Cannot index object with number. 

我尝试了函数keys,它按预期返回了键。但是没有values 函数,否则我可以获取值并只返回第一个元素

cat result.json | jq -r 'keys'

当键名未知时,有没有办法从这个字符串中获取第 0 个值?

【问题讨论】:

    标签: json jq key-value


    【解决方案1】:

    您正在寻找first/1

    first(.[])
    

    Online demo

    如果您至少知道第一个值始终是标量,那么您可以丢弃其余输入以避免耗尽内存和浪费 CPU 时间。

    $ jq --stream -n 'input[1]' file
    "3.1.44.0"
    

    【讨论】:

      【解决方案2】:

      我试过keys这个函数

      您可以像这样使用keys_unsorted 函数:

      .[keys_unsorted[0]]
      

      【讨论】:

        【解决方案3】:

        您可以使用to_entries 函数到达那里!

        jq 'to_entries|.[0].value' file.json
        

        应该可以解决问题。

        来自jq文档:

        如果 to_entries 被传递一个对象, 然后对于输入中的每个 k: v 条目,输出数组包括 {"key": k, "value": v}。

        所以在它之后你的 json 将如下所示:

        [
          {
            "key": "RandomKey1",
            "value": "3.1.44.0"
          },
          {
            "key": "Common",
            "value": {
              "Services": "3.50.103.0",
              "Common": "3.50.103.0"
            }
          }
        ]
        

        您可以在哪里找到第一个键及其对应的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-10
          • 2020-07-02
          • 1970-01-01
          • 1970-01-01
          • 2021-01-30
          • 2021-11-09
          • 2015-01-23
          • 2019-02-24
          相关资源
          最近更新 更多