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

如何使用jq将多行JSON转为数组并按指定键值排序?

jq实现逐行JSON转数组并按指定键排序

前置场景

现有input.log文件,逐行存储独立JSON对象,内容如下:

{"foo": "1", "foo2": "2"}
{"foo": "3", "foo2": "4"}
{"foo": "5", "foo2": "6"}
{"foo": "7", "foo2": "8"}

需要使用jq完成两个处理:

  • 将多个独立JSON对象合并为一个JSON数组
  • 以公共键foo的值为依据对数组元素排序

实现命令

基础版(按字符串规则排序)

直接用jq的slurp模式读取所有输入为数组,再调用排序函数即可:

jq -s 'sort_by(.foo)' input.log

参数说明:

  • -s:即slurp模式,自动将输入流中所有独立JSON条目读取后组装为单个数组,无需手动拼接
  • sort_by(.foo):遍历数组元素,取每个元素的foo字段值作为排序键,执行升序排序

数值排序版(避免字符串排序逻辑误差)

如果foo存储的是数字字符串,直接按字符串排序会出现"10"排在"2"前面的问题,此时需要先将字段值转为数值类型再排序:

jq -s 'sort_by(.foo | tonumber)' input.log

如果需要降序排列,在排序逻辑后追加reverse即可:

jq -s 'sort_by(.foo | tonumber) | reverse' input.log

示例执行结果

针对给出的示例文件,执行上述排序命令后输出如下:

[
  {"foo": "1", "foo2": "2"},
  {"foo": "3", "foo2": "4"},
  {"foo": "5", "foo2": "6"},
  {"foo": "7", "foo2": "8"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:27:48