一尘不染

将具有key = value对的文本文件转换为jq中的特定json格式

json

我在input.txt中有一个具有以下值的文本文件

key1=value1\r
key2=value2
key3=value3\r
key4=value4

需要jq rexpression通过删除“ \ r”将其转换为以下json格式

output.json

{
"Environment": {
    "Variables": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3",
        "key4": "value4"
    }
}

}

我试过下面的表达式并得到

jq -Rs [ split("\n")[] | select(length > 0) | split("=") | {(.[0]): .[1]} ]

并获得以下输出

[
  {
   "key1ey1": "Value1\r"
  },
  {
   "key2": "value2"
  },
  {
   "key3": "value3\r"
  },
  {
   "key4": "value4"
  }

]

阅读 895

收藏
2020-07-27

共1个答案

一尘不染

jq 解:

jq -sR '{"Environment":
            {"Variables": [split("\n")[:-1][] | rtrimstr("\\r") 
                             | split("=") | {(.[0]): .[1]}
                          ]  | add
            }
        }' input.txt

输出:

{
  "Environment": {
    "Variables": {
      "key1": "value1",
      "key2": "value2",
      "key3": "value3",
      "key4": "value4"
    }
  }
}

警告

此解决方案假定=未出现在输入字符串的“值”部分中。

2020-07-27