[英]Add text file as an array to json field using jq
我有一个 JSON 文件和一个文本文件,如下所示:
{
symbols: null,
symbols_count : null
}
值.txt
VALUE1
VALUE2
VALUE3
使用 jq,我想将 values.txt 的值作为数组添加到 json 的符号字段中。
symbols_count=$(wc -l < values.txt)
jq ".symbol_count = $symbols_count" < input.json | \
jq --slurpfile symbols values.txt '.symbols_count=$symbols'
最后一个 jq 命令失败,因为 values.txt 中的值没有用 "" 括起来。
有没有办法在不改变 values.txt 的情况下添加双引号?
jq 期望其输入是有效的 JSON 或原始文本,因此如果您可以确保“JSON 文件”是有效的 JSON,这可能是最简单的。 如果这是一个问题,请参阅 jq FAQ 以获取更多详细信息。
处理 values.txt 的一种方法是使用--rawfile
命令行选项:
< input.json jq --rawfile text values.txt '
.symbols = [$text|splits("\n")|select(length>0)]
| .symbols_count = (.symbols|length)'
jq -nR '([inputs | select(length > 0)]) |
{"symbols":., "symbols_count":(. | length)}' values.txt
带有注释的jq
程序:
values2json
( chmod +x values2json
)
#!/usr/bin/env -S jq -fnR
(
# Select non-empty input lines as an array
[ inputs | select( length > 0 ) ]
) |
# Build the object
{
# with the array created above
"symbols": .,
# and the length of the array
"symbols_count": (. | length)
}
用法:
./values2json values.txt
Output 来自样本数据:
{
"symbols": [
"VALUE1",
"VALUE2",
"VALUE3"
],
"symbols_count": 3
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.