将带有键=值对的文本文件转换为jq中特定的json格式

use*_*241 4 shell json jq

我有一个文本文件,input.txt 中包含以下值

key1=value1\r
key2=value2
key3=value3\r
key4=value4
Run Code Online (Sandbox Code Playgroud)

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

输出.json

{
"Environment": {
    "Variables": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3",
        "key4": "value4"
    }
}
Run Code Online (Sandbox Code Playgroud)

}

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

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

并得到以下输出

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

]
Run Code Online (Sandbox Code Playgroud)

Rom*_*est 6

jq解决方案:

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

输出:

{
  "Environment": {
    "Variables": {
      "key1": "value1",
      "key2": "value2",
      "key3": "value3",
      "key4": "value4"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

警告

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