Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.3k views
in Technique[技术] by (71.8m points)

shell - Convert text file with key=value pair to specific json format in jq

I have a text file with following values in input.txt

key1=value1

key2=value2
key3=value3

key4=value4

need the jq rexpression to convert it to below json format by removing " " also

output.json

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

}

I have tried the below expression and getting the

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

and getting the below output

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

]
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

jq solution:

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

The output:

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

Caveat

This solution assumes = does not appear in the "value" section of the input strings.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...