将\ n IPv4地址列表格式化为json

时间:2019-01-31 04:09:45

标签: json bash formatting sh jq

我在列表中输出了一个IPv4地址列表,每个列表之间用\ n分隔。我想将其导入到的程序期望它采用以下格式:

{
  "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"
  ]
]

1 个答案:

答案 0 :(得分:3)

这是一个解决方案:

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

如果这看起来有些不可思议,那么您可能想使用更普通的变体:

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

当然,在实践中,您可能还希望删除输入中的多余空格,过滤掉注释,执行有效性检查或过滤掉无效输入...