简体   繁体   English

JSON到CSV使用JQ

[英]json to csv using jq

Looking to convert the following json example into csv using jq. 希望使用jq将以下json示例转换为csv。 The work is being performed on a centos 6.9, i am able to add tools to the box if need. 这项工作是在centos 6.9上执行的,如果需要,我可以在工具箱中添加工具。 The purpose of normalizing the json into csv is for a SIEM feed. 将json标准化为csv的目的是为了提供SIEM供稿。

JSON: JSON:

{
  "Key1": "Value1",
  "Key2": "Value2",
  "Key3": "Value3",
  "key4": 4,
  "key5": 5,
  "key6": "value6"
}
{
  "Key1": "Value1",
  "Key2": "Value2",
  "Key3": "Value3",
  "key4": 4,
  "key5": 5,
  "key6": "value6"
}
{
  "Key1": "Value1",
  "Key2": "Value2",
  "Key3": "Value3",
  "key4": 4,
  "key5": 5,
  "key6": "value6"
}

Output expecting: 预期输出:

"key1":"Value1","key2":"Value2","key3":"Value3","key4":4,"key5":5,"key6":"Value6"
"key1":"Value1","key2":"Value2","key3":"Value3","key4":4,"key5":5,"key6":"Value6"
"key1":"Value1","key2":"Value2","key3":"Value3","key4":4,"key5":5,"key6":"Value6"

First, that's not csv. 首先,这不是csv。 The quotes would be interpreted as containing the single value. 引号将被解释为包含单个值。 You have multiple sets of quotes per comma-separated value. 每个逗号分隔的值都有多组引号。 But if that's what you want as output, you can definitely generate it, just know that it's not real csv. 但是,如果这是您想要的输出,则可以肯定地生成它,只知道它不是真正的csv。

$ jq -r 'to_entries | map("\(.key|tojson):\(.value|tojson)") | join(",")' input.json

Here is a filter which generates the expected output (assuming data in data.json ): 这是一个生成预期输出的过滤器(假设data.json数据):

$ jq -Mr '[keys[] as $k | {($k):.[$k]} | tojson[1:-1]] | join(",")' data.json
"Key1":"Value1","Key2":"Value2","Key3":"Value3","key4":4,"key5":5,"key6":"value6"
"Key1":"Value1","Key2":"Value2","Key3":"Value3","key4":4,"key5":5,"key6":"value6"
"Key1":"Value1","Key2":"Value2","Key3":"Value3","key4":4,"key5":5,"key6":"value6"

Try it online at jqplay.org 在jqplay.org上在线尝试

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM