Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将key=value对的文本文件转换为jq中的特定json格式_Json_Shell_Jq - Fatal编程技术网

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

将key=value对的文本文件转换为jq中的特定json格式,json,shell,jq,Json,Shell,Jq,我有一个文本文件,其中包含以下值 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",

我有一个文本文件,其中包含以下值 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"
  }

]

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"
    }
  }
}
警告
此解决方案假定
=
不出现在输入字符串的“值”部分。

以下方法允许
=
出现在
键=值
字符串的值部分:

调用:jq-n-R-f program.jq input.txt

key1=value1\r
key2=value2
key3=value3\r
key4=value4
program.jq:

[inputs | sub("\\\\r$";"") | capture("^(?<key>[^=]*)=(?<value>.*)")]
| from_entries
| {Environment: { Variables: .}}
[inputs|sub(\\\\r$)| capture(^(?[^=]*)=(?*)]
|来自
|{环境:{变量:.}}

删除了另一个队列中的复制。如果你愿意,你可以在那里回答