当前位置: 首页 > 面试题库 >

jq和bash:从变量制作JSON数组

戚英逸
2023-03-14
问题内容

我正在使用jq从变量值在bash中形成JSON。

如何制作简单的变量

$ VAR="one two three"
$ jq -n "{var:\"$VAR\"}"
{
  "var": "one two three"
}

但是还不能制作数组。我有

$ echo $ARR
one
two
three

想要得到像

{
  "arr": ["one", "two", "three"]
}

我只能设法得到乱码的输出

$ jq -n "{arr: [\"$ARR\"]}"
{
  "arr": [
    "one\ntwo\nthree"
  ]
}

如何以正确的方式形成JSON数组?能jq做到吗?

编辑 :当只有jq 1.3时被问到问题。现在,在jq
1.4中,可以直接执行我要求的操作,例如@JeffMercado和@peak建议的操作。虽然不会撤销对@jbr答案的接受。


问题答案:

jq完全按照您的指示去做。 jq不是用于生成JSON的程序,而是用于查询JSON的工具。您对 -n交换机所做的只是将其用作漂亮的打印机。 因此,如果要使用包含“一个”,“两个”,“三个”的数组打印对象,则必须生成它。

VAR="one two three"
VAR=$(echo $VAR | sed -e 's/\(\w*\)/,"\1"/g' | cut -d , -f 2-)
echo "{var: [$VAR]}"

更新资料

正如Bryan)和其他人在下面提到的那样,确实可以用jq生成JSON,并且从1.4版本开始,甚至有可能直接执行OP的要求。



 类似资料:
  • 问题内容: 我已经编写了一个脚本来从中检索某些值。如果将值提供给jq ,它将起作用,但是该变量似乎不起作用(或者我不知道如何使用它)。 问题答案: 还考虑将shell变量(EMAILID)作为jq变量传递(为便于说明,此处也称为EMAILID): 后记 作为记录,另一种可能性是使用jq 函数访问环境变量。例如,考虑以下bash命令序列: 输出是一个JSON字符串:

  • 问题内容: 我试图从bash中的字符串创建一个json对象。字符串如下。 输出来自docker stats命令,我的最终目标是将自定义指标发布到AWS CloudWatch。我想将此字符串格式化为json。 我以前使用过jq命令,似乎在这种情况下应该可以正常工作,但是我还没有能够提出一个好的解决方案。除了使用sed或awk对变量名进行硬编码和索引编制以外。然后从头开始创建一个json。任何建议,将

  • 问题内容: 我似乎无法从php中将变量传递给我的bash脚本。无论我如何尝试,$ uaddress和$ upassword都变为空。 *_ __ _ __ __ * __ __ bash * __ __ * * ** *_ __ _ __ * PHP __ * __ __ * __ ** *_ __ _ _ _输出和调试 _ _ _ * *_ 问题答案: 您需要将变量作为参数传递给Shell脚本,

  • 问题内容: 我需要将这些bash变量读入JSON字符串,而我对bash并不熟悉。任何帮助表示赞赏。 问题答案: 如果您不提前知道变量的内容是否正确转义以包含在JSON中,则最好使用类似生成JSON 的程序。否则,您将因麻烦而最终使用无效的JSON。

  • 我有变量< code>$foo="something",我想使用: 让“某事”得到回应。

  • 不同于许多其他编程语言,Bash 并不区分变量的类型。本质上说,Bash 变量是字符串,但在某些情况下,Bash 允许对变量进行算术运算和比较。决定因素则是变量值是否只含有数字。 样例 4-4. 整数还是字符串? #!/bin/bash # int-or-string.sh a=2334 # 整数。 let "a += 1" echo "a = $a "