【问题标题】:Get value from JSON using jq使用 jq 从 JSON 中获取值
【发布时间】:2019-12-06 12:00:46
【问题描述】:

我正在尝试将 json 作为变量导出:

$ export VARIABLE='[{"id": 2, "name": "job", "description": "job", "token": "toknetokentokentoken/token="}]'

$ echo $VARIABLE | jq .

[
  {
    "id": 2,
    "name": "job",
    "description": "job",
    "token": "toknetokentokentoken/token="
  }
]

然后我试图从令牌中获取值:

TOKEN=$(echo "$VARIABLE" | jq -r '.[] | select (.name == "job").token')

但它什么也不返回。我正在寻找,但我找不到问题。

【问题讨论】:

  • 带有 $() 的表达式在使用 bash 时的行为至少可以追溯到 3.2。我怀疑提出的 Q 与异常行为相关的情况不匹配。
  • 当您说“不返回任何内容”时,您的意思是TOKEN 的值是空字符串,还是赋值不产生输出。作业不产生输出。

标签: json bash jq


【解决方案1】:

试试

VARIABLE='[{"id": 2, "name": "job", "description": "job", "token": "toknetokentokentoken/token="}]'
TOKEN=$(echo "$VARIABLE"|jq '.[] | select(.name == "job").token')
echo "$TOKEN"

编辑:建议一些澄清:

OP 没有明确说明 it erturns nothing 部分,但正如 @chepner 在 cmets 中指出的那样:assingments 不会产生输出

反引号和$() 可以互换,您应该使用$(),因为反引号已过时且不支持嵌套

【讨论】:

  • 我用本地 (bash) 终端中使用的确切命令更新了答案
  • 你为什么要引入反引号?它们已经过时了。
  • ...如果您使用反引号,则需要大量额外的转义(在嵌套它们时,或者在某些情况下,在其中使用反斜杠时),$( ) 不需要这些转义。因此,它们实际上不可以互换。
  • 另外,echo "$FOO" | bar 通常比bar <<<"$FOO" 慢,至少在足够现代的系统上可以将TMPDIR 存储在内存中。
  • @user1859022,您能否edit 这个答案更明确地说明 OP 犯了什么错误,以及通常您必须改变什么?没有更多解释,其他人很难从阅读此答案中学习,而且,这就是他们的目的。 :)
猜你喜欢
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 2017-01-05
相关资源
最近更新 更多