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

Windows命令行下使用jq拆分JSON数组元素并按制表符分列的方法

问题描述

我是jq的新手,正在Windows命令行中使用它。需要将输入JSON中的数组拆分为多行,再将数组中的每个元素按制表符(\t)分割为列,同时处理第一个元素的字符串截取(比如"001-CARDIO-GRAN"要提取出"GRAN")。

输入JSON:

{
  "ProcessId": "5452",
  "TotalRows": 226171,
  "Rows": [
    "001-CARDIO-GRAN\t1052",
    "01_MO_FIN\t1148",
    "02_MO_S_PACK\t1148"
  ]
}

期望输出:

GRAN,1052
01_MO_FIN,1148
02_MO_S_PACK,1148

我尝试了命令:

jq-win32 "last(.[])" output.json

得到的结果是:

GRAN\t1052",
"01_MO_FIN\t1148",
"02_MO_S_PACK\t1148",

请问如何进一步通过管道操作完成拆分以实现需求?

解决方案

直接用jq就能完成所有处理,不需要额外管道,命令如下:

jq-win32 -r '.Rows[] | split("\t") | (.[0] | if test("-") then split("-")[-1] else . end) + "," + .[1]' output.json

命令拆解:

  • -r:输出原始字符串,不会带JSON格式的引号
  • .Rows[]:遍历Rows数组里的每一个元素
  • split("\t"):把每个元素按制表符拆分成子数组(比如"001-CARDIO-GRAN\t1052"会变成["001-CARDIO-GRAN", "1052"])
  • (.[0] | if test("-") then split("-")[-1] else . end):处理子数组的第一个元素,如果包含-就取最后一段,否则保持原样
  • + "," + .[1]:把处理后的第一个元素和第二个元素用逗号拼接成最终字符串

如果一定要结合管道用Windows工具辅助处理,也可以用PowerShell配合,但效率不如纯jq:

jq-win32 -r '.Rows[]' output.json | powershell -Command "$input | ForEach-Object { $parts = $_ -split '\t'; if ($parts[0] -match '-') { $val = $parts[0].Split('-')[-1] } else { $val = $parts[0] }; \"$val,$($parts[1])\" }"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:33:23