jq - 如何遍历不同名称的键

Ada*_*eda 7 iteration json key jq

我有JSON看起来像这样

{
  "keyword1": {
    "identifier1": 16
  },
  "keyword2": {
    "identifier2": 16
  }
}
Run Code Online (Sandbox Code Playgroud)

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

pea*_*eak 21

这个问题的原始标签是jq这样的jq解决方案:

.[] | keys[]
Run Code Online (Sandbox Code Playgroud)

例如,使用问题中显示的输入:

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

"identifier1"
"identifier2"
Run Code Online (Sandbox Code Playgroud)

要按顺序检索键名,请使用keys_unsorted.


bri*_*web 13

我认为沿着这些路线的东西会很好用:

jq '. | to_entries | .[].key'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


tur*_*yag 5

我来到这里希望从 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")) }'
Run Code Online (Sandbox Code Playgroud)

输出:

{
  "fields": {
    "second": "two"
  }
}
Run Code Online (Sandbox Code Playgroud)