繁体   English   中英

使用 jq 将文本文件作为数组添加到 json 字段

[英]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 的情况下添加双引号?

  1. jq 期望其输入是有效的 JSON 或原始文本,因此如果您可以确保“JSON 文件”是有效的 JSON,这可能是最简单的。 如果这是一个问题,请参阅 jq FAQ 以获取更多详细信息。

  2. 处理 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM