使用jq解析json输出

使用jq解析json输出,json,export-to-csv,jq,Json,Export To Csv,Jq,首先,非常感谢您的支持 我无法将json输出解析为csv格式。我能够获得某种产出,但这并不符合预期 Curl命令输出 { "results": [{ "name": "smith Jones", "DOB": "1992-03-26", "Enrollmentdate": "2013-08-24" }, { "name": "Jacob Mathew",

首先,非常感谢您的支持

我无法将json输出解析为csv格式。我能够获得某种产出,但这并不符合预期

Curl命令输出

{
    "results": [{
            "name": "smith Jones",
            "DOB": "1992-03-26",
            "Enrollmentdate": "2013-08-24"

        },

        {
            "name": "Jacob Mathew",
            "DOB": "1993-03-26",
            "Enrollmentdate": "2014-10-02"
        },

        {
            "name": "Anita Rodrigues",
            "DOB": "1994-03-26",
            "Enrollmentdate": "2015-02-19"
        }
    ]
}
常用JQ

<curl-command>|jq '.results | map(.name), map(.DOB), map(.Enrollmentdate) | @csv' >file.csv
这可能不是csv,但下面是预期的输出

Name                 DOB             Enrollmentdate
smith jones,       1992-03-26,        2013-08-24
jacob Mathew,      1993-03-26,        2014-10-02
Anitha Rodrigues,  1994-03-26,        2015-02-19

对于示例JSON,调用:

jq -r '
  .results[]
  | [.name, .DOB, .Enrollmentdate ]
  | @csv'
产生:

"smith Jones","1992-03-26","2013-08-24"
"Jacob Mathew","1993-03-26","2014-10-02"
"Anita Rodrigues","1994-03-26","2015-02-19"
如果您不想(在本例中)使用多余的引号,可以将
@csv
替换为
join(“,”
),但最好编写一个简单的过滤器,用逗号等来处理值

标题 如果第一个结果中的键顺序正确,则您可以通过以下操作逃脱:

  (.results[0] | keys_unsorted),
  (.results[]
  | [.name, .DOB, .Enrollmentdate ])
  | @csv
但是,按照以下思路使用一点jq魔术可能会更好:

  (.results[0] | keys_unsorted) as $headers
  | $headers,
    (.results[]
     | [getpath($headers[]|[.])])
  | @csv

对于示例JSON,调用:

jq -r '
  .results[]
  | [.name, .DOB, .Enrollmentdate ]
  | @csv'
产生:

"smith Jones","1992-03-26","2013-08-24"
"Jacob Mathew","1993-03-26","2014-10-02"
"Anita Rodrigues","1994-03-26","2015-02-19"
如果您不想(在本例中)使用多余的引号,可以将
@csv
替换为
join(“,”
),但最好编写一个简单的过滤器,用逗号等来处理值

标题 如果第一个结果中的键顺序正确,则您可以通过以下操作逃脱:

  (.results[0] | keys_unsorted),
  (.results[]
  | [.name, .DOB, .Enrollmentdate ])
  | @csv
但是,按照以下思路使用一点jq魔术可能会更好:

  (.results[0] | keys_unsorted) as $headers
  | $headers,
    (.results[]
     | [getpath($headers[]|[.])])
  | @csv

非常感谢。这就像一个符咒:)但我如何打印关键名称(姓名、出生日期、注册日期)?我可以写一个bash脚本来生成它,但我想知道JQ是否可以解决它。谢谢!这就像一个符咒:)但我如何打印关键名称(姓名、出生日期、注册日期)?我可以编写一个bash脚本来生成它,但我想知道JQ是否可以解决它。