【问题标题】:Create JSON array from shell array with jq使用 jq 从 shell 数组创建 JSON 数组
【发布时间】:2018-01-03 17:48:21
【问题描述】:

我们正在尝试让jqv1.5 64bit 解析一个数组,然后回显结果。

我们有正确的jq 语法吗?

#!/bin/bash
declare -a nameArr 
nameArr=("Leia" "Darth Vader" "Anakin" "Han Solo" "Yoda")
jq -c -n  "$nameArr" 

报错

jq: error: syntax error, unexpected $end (Unix shell quoting issues?) at <top-level>, line 1:
Leia,    
jq: 1 compile error

【问题讨论】:

  • 你的输出应该是什么样子的?
  • 注意,顺便说一句,jq -c -n "$nameArr" 仅传递数组的第一个元素,因此它使用您的原始输入运行jq -c -n "Leia,"。没有一个很好的方法来传递一个 shell 数组(它可以包含任何有效的 C 字符串列表)单个 C 字符串中。
  • @CharlesDuffy,逗号是对的。在创建问题时,我确实将其添加为错字。感谢您的捕获,我已更新为实际数组

标签: arrays json bash jq


【解决方案1】:

要使用不可能作为值存在于 shell 数组中的符号,NUL 是一个合适的选择。

nameArr=( "Leia" "Darth Vader" "Anakin" "Han Solo" "Yoda" )
printf '%s\0' "${nameArr[@]}" | jq -csR 'split("\u0000")'

...正确发出:

["Leia","Darth Vader","Anakin","Han Solo","Yoda"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2023-03-26
    • 2017-05-27
    • 2021-07-22
    相关资源
    最近更新 更多