如何使用jq对JSON中各键对应的值进行截断缩写处理
jq实现JSON值超长截断方案
你可以直接使用如下jq命令实现需求,阈值n可自行调整:
# 示例中n=5,修改--argjson后的数字即可调整截断阈值 jq --argjson n 5 ' # 自定义截断函数 def truncate($max_len): tostring | if length > $max_len then .[:$max_len] + " ..." else . end; # 遍历顶层所有键的值做处理 map_values( (tostring | length) as $str_len # 仅字符串长度超过阈值时截断,否则保留原始值和类型 | if $str_len > $n then truncate($n) else . end )' 你的JSON文件路径
逻辑说明
- 用
--argjson传入数字类型的阈值n,避免类型转换问题 - 先计算每个值转成字符串后的长度,仅在超过阈值时才做转换截断,短值会保留原始类型(比如数字、布尔值不会被强行转成字符串)
- 对于对象、数组等复合类型,会自动转成JSON字符串后再做截断,符合预览折叠的需求
效果示例
用你提供的测试JSON运行上述命令后,输出如下:
{ "a": "hi", "b": 4213, "c": "23154 ...", "d": "a ver ...", "e": "{\n \"x ..." }
如果需要处理嵌套层级的所有值,只需要把上面的map_values改成递归遍历的写法即可,当前版本已经完全满足顶层键预览的需求。
内容的提问来源于stack exchange,提问作者Haterind
相关产品推荐
相关产品推荐

