使用jq或Python将JSON转为CSV

-2 投票
1 回答
39 浏览
提问于 2025-04-14 17:48

需要帮助把这个JSON转换成CSV格式,并且使用Column Dimension中的一个特定元素作为CSV的列标题。

输入的JSON你的文本

{
    "Columns": [
        {
            "Id": "ItemName",
            "IsEditable": false
        },
        {
            "Id": "Date",
            "IsEditable": false
        },
        {
            "Id": "Qty",
            "IsEditable": false
        }
    ],
    "Rows": [
        {
            "Values": [
                "ITEM1",
                "10-MAY-2024",
                "100"
            ]
        },
        {
            "Values": [
                "ITEM2",
                "20-MAY-2024",
                "200"
            ]
        },
        {
            "Values": [
                "ITEM3",
                "30-MAY-2024",
                "400"
            ]
        }
    ],
    "QueryHandle": {
        "QueryID": "00101",
        "Worksheet": {
            "Name": "Test20",
            "Scope": "NA"
        },
        "WorkAlloc": "2024-MAY"
    },
    "RowCount": 3
}

需要的CSV输出格式(我只需要下面的数据,JSON中的其他元素可以忽略)。

列标题来自于.Columns[]|.Id

ItemName, Date, Qty
"Item1","10-MAY-2024","100"
"Item2","20-MAY-2024","200"
"Item3","20-MAy-2024","400"

我尝试参考了这个帖子:

如何使用jq将任意简单JSON转换为CSV?

但一直没能成功。

1 个回答

0

你需要把输出的行收集到数组里。至于表头,你已经自己给出了路径:.Columns[].Id。而实际的行也已经整理成一个数组了。

jq -r '[.Columns[].Id], .Rows[].Values | @csv'
"ItemName","Date","Qty"
"ITEM1","10-MAY-2024","100"
"ITEM2","20-MAY-2024","200"
"ITEM3","30-MAY-2024","400"

演示链接

注意:如果想要改变字母的大小写,可以使用ascii_upcase或者ascii_downcase。如果不是所有字母都需要改变大小写,先把它们分开成单个字符,然后再用add把它们组合起来。

撰写回答