【问题标题】:JQ, convert CSV (parent child format) to JSONJQ,将CSV(父子格式)转换为JSON
【发布时间】:2021-03-19 06:15:45
【问题描述】:

我有一个 CSV 文件(父子格式)。是否可以使用 JQ 转换为 JSON 格式?

CSV 文件 <pre>

id parent_id 文本 1个空引擎 2 1 排气 3 1 冷却 4 3 散热风扇 5 3 水泵 6 空帧 7 6 轮 8 6 刹车 9 8刹车卡钳 10 6 根电缆 </Pre>

JSON 文件 <Pre>

[ { “id”:“1”, “文本”:“引擎”, “孩子们”: [ { “id”:“2”, “文本”:“排气”, “孩子们”: [] }, { “id”:“3”, “文本”:“冷却”, “孩子们”: [ { “id”:“4”, "text": "散热风扇", “孩子们”: [] }, { “id”:“5”, "text": "水泵", “孩子们”: [] } ] } ] }, { “id”:“6”, “文本”:“框架”, “孩子们”: [ { “id”:“7”, “文本”:“轮子”, “孩子们”: [] }, { “id”:“8”, “文本”:“刹车”, “孩子们”: [ { “id”:“9”, "text": "刹车卡钳", “孩子们”: [] } ] }, { “id”:“10”, “文本”:“电缆”, “孩子们”: [] } ] } ] </Pre>

【问题讨论】:

    标签: json csv parent-child jq


    【解决方案1】:

    以下内容提供了完整解决所述问题的基础。代替 提供有关孩子的冗余详细信息,它只提供他们的 ID。如果您确实需要冗余,那么只需再添加一个后处理步骤,这很简单。

    这里的解决方案是基于“儿童”字典的构建。

    调用

    大致如下:

    jq -R -f program.jq data.csv
    

    程序

    def obj($headers):
      . as $in
      | reduce range(0; $headers|length) as $i ({}; 
          .[$headers[$i]] = $in[$i]);
    
    split(",") as $headers
    | [ inputs
        | split(",")
        | map_values(if . == "NULL" then null else . end)
        | obj($headers) ]
    | (reduce .[] as $row ({};
          if $row.parent_id
          then .[$row.parent_id] += [$row.id]
          else . end ) ) as $children
    | map( del(.parent_id) | .children = ($children[.id] // []) )
    
    

    输出

    使用给定的输入,输出开始如下:

    [
      {
        "id": "1",
        "text": "engine",
        "children": [
          "2",
          "3"
        ]
      },
      {
        "id": "2",
        "text": "exhaust",
        "children": []
      },
    
    

    【讨论】:

    • 嗨,Peak,非常感谢您的快速回答。我创建了两个文件,然后运行 ​​jq-win64.exe -R 1208.jq 1208.csv,它在 ,第 1 行:1208.jq jq:1 编译错误,我运行 jq-win64.exe -R -s -f 1208.jq 1208.csv,它给了我 []。我做错事情了 ?另一个问题:如果 ID 是文本,它会起作用吗?我是 JQ 的新手。很抱歉提出这样的问题。
    • 请参阅有关调用的更新。 id 被假定为文本,因为这就是您的 JSON 所指示的内容。如果不是文本,则需要调整给定的解决方案。
    • 我还有一些其他问题,我只能作为新问题发布。所以我在这里做了:stackoverflow.com/questions/65278602/…
    猜你喜欢
    • 2021-03-24
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 2022-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多