簡體   English   中英

將帶有鍵=值對的文本文件轉換為 jq 中的特定 json 格式

[英]Convert text file with key=value pair to specific json format in jq

我在 input.txt 中有一個包含以下值的文本文件

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

需要 jq rexpression 通過刪除“\\r”也將其轉換為以下 json 格式

輸出.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"
    }
  }
}

警告

此解決方案假定=未出現在輸入字符串的“值”部分。

以下方法允許=出現在key=value字符串的值部分:

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

程序.jq:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM