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

JQ按字符串类型小数字段降序排序异常如何返回完整对象

问题原因

排序结果错误的核心原因是weight字段为字符串类型,jq默认对字符串执行字典序逐字符比较,不会自动解析为数值计算大小,因此会出现忽略小数点数值逻辑的排序结果。
你之前拆分小数点再转数字的方案属于冗余处理,直接对整个weight字段值调用tonumber做类型转换即可作为正确的排序键,不需要额外拆分字符串。之前的命令只能返回weight字段,是因为你用[.[].weight]提前丢弃了原对象的其他属性,只要在排序逻辑内做类型转换、不修改原数组元素结构,就能保留完整的对象属性。

可用命令

写法1:升序排序后反转得到降序结果

jq 'map(select(.weight)) | sort_by(.weight | tonumber) | reverse' 输入文件.json

命令逻辑说明:

  • map(select(.weight)):过滤掉不存在weight字段的无效条目
  • sort_by(.weight | tonumber):以weight转为数值后的结果为键做升序排序
  • reverse:将升序结果反转,得到weight从高到低的降序排列

写法2:排序键取负直接实现降序

jq 'map(select(.weight)) | sort_by(- (.weight | tonumber))' 输入文件.json

该写法直接对转换后的数值取负作为排序键,不需要额外反转步骤,排序效果和写法1完全一致。

排序结果

执行命令后返回的完整JSON对象顺序为:

  • car,weight值527561695272.42000000
  • bike,weight值9914795.00000000
  • truck,weight值999147.00000000
  • plane,weight值819002.68900000
  • train,weight值89129.70000000
    所有对象的name、amount等原有属性都会完整保留,不会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:48:15