使用 jq 将字符串列表转换为 JSON 数组

Hal*_*ast 0 string json jq convertto-json

有一个字符串列表(每行一个),比​​如

str1
str2
...
Run Code Online (Sandbox Code Playgroud)

如何将这些转换为 JSON 列表["str1", "str2"]

Hal*_*ast 5

假设输入是在stdin上给出的,下面的命令解决了这个问题:

jq -Rn '[inputs]'
Run Code Online (Sandbox Code Playgroud)

该标志-R将输入读取为“原始”(即未加引号的字符串)并将-nstdin 移交给inputs(slurping with-s不起作用,因为当与 结合时-R,它将整个输入读取为单个字符串)。添加-c以在一行上打印 JSON,就像问题中一样。

添加一个小过滤器可以跳过任何空行(如尾随换行符):

jq -Rn '[inputs|select(length>0)]'
Run Code Online (Sandbox Code Playgroud)

如果字符串由其他字符分隔,例如,,则字符串可能会被分割为

jq -R 'split(",")'
Run Code Online (Sandbox Code Playgroud)

这也可用于拆分\n以解决上述情况,但我(未经证实的)假设是上述解决方案对于使用其他线路终结器的系统更具便携性。