我有一个正在输出的IPv4地址列表,每个地址都用分隔符隔开。要将这些地址导入到的程序要求它采用以下格式:

{
  "data":[
      { "IP":"127.0.0.1"  },
      { "IP":"192.168.0.1" }
  ]
}

上面的输入数据应该是:
127.0.0.1
192.168.0.1

我在jq cookbook中寻找了一些想法,但我能把它们串在一起的最接近的方法是使用[]而不是{},而不是内部数据,并且只有不带键的值。
jq -sR '[sub("\n$";"") | splits("\n") | sub("^ +";"") | [splits(" +")]]'

输出:
[
  [
    "127.0.0.1"
  ],
  [
    "192.168.0.1"
  ]
]

最佳答案

下面是一个解决方案:

jq -Rn '{data: [ {IP: inputs} ] }' input.txt

如果这看起来有点神奇,你可能会使用更普通的变体:
jq -Rn '{data: [ inputs | {IP: .} ] }' input.txt

当然,在实践中,您可能还希望删除输入中的无关空白、筛选出注释、执行有效性检查或筛选出无效输入。。。

09-10 11:03
查看更多