【问题标题】:jq - How to iterate through keys of different namesjq - 如何遍历不同名称的键
【发布时间】:2016-05-07 07:10:02
【问题描述】:

我有这样的 JSON

{
  "keyword1": {
    "identifier1": 16
  },
  "keyword2": {
    "identifier2": 16
  }
}

我需要遍历关键字来获取标识符(不确定我是否在这里使用了正确的术语)。看起来很简单,但是因为关键字的命名都不同,我不知道如何处理。

【问题讨论】:

  • 请指定您希望输出的样子。
  • 就像峰值的答案

标签: json key iteration jq


【解决方案1】:

这个问题的原始标签是jq,所以这里是jq 解决方案:

.[] | keys[]

例如,输入如问题所示:

$ jq '.[] | keys[]' input.json

"identifier1"
"identifier2"

要按照它们在 JSON 对象中出现的顺序检索键名,请使用 keys_unsorted

【讨论】:

  • 很好,我不知道你可以用[]把一个对象变成一个数组。
【解决方案2】:

我来到这里希望从我的 JSON 中整理出一堆键,我发现两个功能很方便。共有三个函数“to_entries”、“from_entries”和“with_entries”。您可以按键或值过滤值,如下所示:

JSON_DATA='
{
  "fields": {
    "first": null,
    "second": "two",
    "third": "three"
  }
}
'

echo "$JSON_DATA" | jq '{fields: .fields | with_entries(select(.value != null and .key != "third")) }'

输出:

{
  "fields": {
    "second": "two"
  }
}

【讨论】:

    【解决方案3】:

    我认为这些方面的东西会很好用:

    jq '. | to_entries | .[].key'
    

    https://stedolan.github.io/jq/manual/#to_entries,from_entries,with_entries

    或者如果您想从变量中获取值:

    JSON_DATA={main:{k1:v1,k2:v2}}
    result=$(jq -n "$JSON_DATA" | jq '.main | to_entries | .[].value' --raw-output)
    echo $result
    
    ##outputs: v1 v2
    

    【讨论】:

    • to_entries 的使用非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2022-07-16
    • 2015-03-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多