【发布时间】:2017-07-07 02:18:43
【问题描述】:
我希望将使用 jq 的 JSON 转换为分隔符分隔的扁平结构。
已经有过这方面的尝试。例如,Flatten nested JSON using jq。
但是,如果 JSON 包含数组,则该页面上的解决方案会失败。例如,如果 JSON 是:
{"a":{"b":[1]},"x":[{"y":2},{"z":3}]}
上述解决方案将无法将上述转换为:
{"a.b.0":1,"x.0.y":2,"x.1.z":3}
此外,我正在寻找一种也允许使用任意分隔符的解决方案。例如,假设空格字符是分隔符。在这种情况下,结果将是:
{"a b 0":1,"x 0 y":2,"x 1 z":3}
我希望通过 CentOS 7 中的 Bash (4.2+) 函数访问此功能,如下所示:
flatten_json()
{
local JSONData="$1"
# jq command to flatten $JSONData, putting the result to stdout
jq ... <<<"$JSONData"
}
该解决方案应适用于所有 JSON 数据类型,包括 null 和 boolean。例如,考虑以下输入:
{"a":{"b":["p q r"]},"w":[{"x":null},{"y":false},{"z":3}]}
它应该产生:
{"a b 0":"p q r","w 0 x":null,"w 1 y":false,"w 2 z":3}
【问题讨论】: