【问题标题】:JQ to CSV issuesJQ 到 CSV 问题
【发布时间】:2020-06-28 03:17:44
【问题描述】:

我之前在这里得到了一些关于 jq 到 csv 问题的帮助。我遇到了一个问题,一些 json 文件有一些额外的值会破坏 jq 命令

这里是json数据。修复部分是破坏 jq 命令的原因

[
    {
        "Name": "John Doe",
        "Car": [
            "Car1",
            "Car2"
        ],
        "Location": "Texas",
        "Repairs: {
            "RepairLocations": {
                "RepairsCompleted":[
                    "Fix1",
                    "Fix2"
                ]
            }
        }
    },
    {
        "Name": "Jane Roe",
        "Car": "Car1",            
        "Location": [
            "Illinois",
            "Kansas"
        ]
    }
]

这里是命令

def expand($keys):
    . as $in
    | reduce $keys[] as $k ( [{}];
        map(. + { 
            ($k): ($in[$k] | if type == "array" then .[] else . end)
        })
    ) | .[];
(.[0] | keys_unsorted) as $h
| $h, (.[] | expand($h) | [.[$h[]]]) | @csv

这是我想要得到的最终结果。此数据不是实际数据。

Name,Car,Location,Repairs:RepairLocation
John Doe,Car1,Texas,RepairsCompleted:Fix1
John Doe,Car1,Texas,RepairsCompleted:Fix2
John Doe,Car2,Texas,RepairsCompleted:Fix1
John Doe,Car2,Texas,RepairsCompleted:Fix2
Jane Roe,Car1,Illinois,
Jane Roe,Car1,Kansas,

对此的任何建议都会很棒。我正在努力弄清楚jq

【问题讨论】:

    标签: json export-to-csv jq


    【解决方案1】:

    可以使用similar question you already asked 的答案之一中所示的相同技术获得一个简单的解决方案。唯一的区别是在“修复”键不存在的情况下满足您的要求:

    ["Name", "Car", "Location", "Repairs:RepairLocation"],
    (.[]
     | [.Name]
        + (.Car|..|scalars|[.])
        + (.Location|..|scalars|[.])
        + (.Repairs|..|scalars
           | [if . == null then . else "RepairsCompleted:\(.)" end]) )
    | @csv
    

    使用辅助函数避免重复

    def s: .. | scalars | [.];
    
    ["Name", "Car", "Location", "Repairs:RepairLocation"],
    (.[]
     | [.Name] 
        + (.Car|s)
        + (.Location|s) 
        + (.Repairs|s|map(if . == null then . else "RepairsCompleted:\(.)" end)))
    | @csv
    

    【讨论】:

    • 谢谢!我不确定我是否需要问一个新的,因为它已经被回答了。我对jq不太熟悉。您对学习使用它的好地方有什么建议吗?
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2023-01-18
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多