【问题标题】:Formatting \n list of IPv4 addresses into json将 IPv4 地址的 \n 列表格式化为 json
【发布时间】:2024-01-10 20:59:01
【问题描述】:

我在一个列表中输出了一个 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"
  ]
]

【问题讨论】:

    标签: json bash formatting sh jq


    【解决方案1】:

    这是一个解决方案:

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

    如果这看起来有点神奇,您可能会喜欢使用更普通的变体:

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

    当然,在实践中,您可能还想删除输入中无关的空格、过滤掉 cmets、执行有效性检查或过滤掉无效输入...

    【讨论】:

    • inputs | select(length>0) 删除原始输入文件中潜在的空行?