You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bash的jq工具将CSV转换为指定JSON格式的问题求助

问题:将CSV转换为指定结构的JSON

需要把CSV文件内容转换为包含configuration键的JSON结构,具体要求如下:

输入CSV内容(output.csv)

cat output.csv
"k","a1",1,"b1","c1","d1",1
"l","a2",2,"b2","c2","d2",2
"m","a3",3,"b3","c3","d3",3
"n","a4",4,"b4","c4","d4",4
"o","a5",5,"b5","c5","d5",5

期望的JSON输出

{
    "configuration": {
      "k": {
        "a": "a1",
        "number1": "1",
        "c": "b1",
        "d": "c1",
        "e": "d1",
        "number2": "1"
      },
      "l": {
        "a": "a2",
        "number1": "2",
        "c": "b2",
        "d": "c2",
        "e": "d2",
        "number2": "2"
      },
      ...
    }
}

当前尝试的jq脚本(api.jq)

cat api.jq

[
  inputs |
     split(",") |
     map(ltrimstr("\"")) |
     map(rtrimstr("\"")) |
      {
        a: .[1],
        number1: .[2],
        c: .[3],
        d: .[4],
        e: .[5],
        number2: .[6]
      }
] | {configuration: .}

错误输出

执行命令 jq -nRf api.jq output.csv 后得到的结果不符合预期,生成的是数组而非嵌套对象:

{
  "configuration": [
    {
      "a": "a1",
      "number1": "1",
      "c": "b1",
      "d": "c1",
      "e": "d1",
      "number2": "1"
    },
    {"a": "a2", "number1": "2", "c": "b2", "d": "c2", "e": "d2", "number2": "2"},
    {"a": "a3", "number1": "3", "c": "b3", "d": "c3", "e": "d3", "number2": "3"},
    {"a": "a4", "number1": "4", "c": "b4", "d": "c4", "e": "d4", "number2": "4"},
    {"a": "a5", "number1": "5", "c": "b5", "d": "c5", "e": "d5", "number2": "5"}
  ]
}

解决方案

现有脚本的核心问题是把处理后的对象存入了数组,但需求是用CSV第一列的值作为键的嵌套对象。修改后的jq脚本如下:

cat api.jq

reduce inputs as $line ({};
  ($line | split(",") | map(gsub("^\"|\"$"; ""))) as $fields
  | .[$fields[0]] = {
      a: $fields[1],
      number1: $fields[2],
      c: $fields[3],
      d: $fields[4],
      e: $fields[5],
      number2: $fields[6]
    }
) | {configuration: .}

改动说明:

  • 用reduce遍历每一行,逐步构建以CSV第一列值为键的对象,替代原有的数组存储方式
  • 用gsub("^\"|\"$"; "")简化引号去除逻辑,替代两次map调用
  • 确保顶层键为configuration,符合需求格式

执行命令:

jq -nRf api.jq output.csv

正确输出:

{
  "configuration": {
    "k": {
      "a": "a1",
      "number1": "1",
      "c": "b1",
      "d": "c1",
      "e": "d1",
      "number2": "1"
    },
    "l": {
      "a": "a2",
      "number1": "2",
      "c": "b2",
      "d": "c2",
      "e": "d2",
      "number2": "2"
    },
    "m": {
      "a": "a3",
      "number1": "3",
      "c": "b3",
      "d": "c3",
      "e": "d3",
      "number2": "3"
    },
    "n": {
      "a": "a4",
      "number1": "4",
      "c": "b4",
      "d": "c4",
      "e": "d4",
      "number2": "4"
    },
    "o": {
      "a": "a5",
      "number1": "5",
      "c": "b5",
      "d": "c5",
      "e": "d5",
      "number2": "5"
    }
  }
}

内容的提问来源于stack exchange,提问作者L_sama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:10:20