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

时间:2018-06-30 14:42:04

标签: json shell jq

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

head

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

output.json

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

}

我尝试了以下表达式并获得

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

并获得以下输出

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

2 个答案:

答案 0 :(得分:2)

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"
    }
  }
}

答案 1 :(得分:1)

以下方法允许var data = [{ optionName: 'LC_10', parentFilterKey: 'automatedTags' }, { optionName: 'LC_11', parentFilterKey: 'automatedTags' }, { optionName: 'LC_12', parentFilterKey: 'automatedTags' }, { optionName: 'V1', parentFilterKey: 'Vendor' }, { optionName: 'V2', parentFilterKey: 'Vendor' }, { optionName: 'V3', parentFilterKey: 'Vendor' }], result = data.reduce((r, { optionName, parentFilterKey }) => { (r[parentFilterKey] = r[parentFilterKey] || []).push(optionName); return r; }, {}); console.log(result);出现在=字符串的值部分中:

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

program.jq:

key=value