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

如何用jq从JSON中提取解码后的指定二进制字节序列?

用jq直接提取指定字节序列的解决方案

你遇到的问题是:JSON里的\u00b7(对应Unicode码点U+00B7),用jq默认提取后会输出它的UTF-8编码字节c2 b7,但你想要直接得到单字节b7,最终得到5f b7 5f的字节序列。

其实不用依赖iconv这类额外工具,jq自身就能实现这个需求,核心思路是把字符串拆解为Unicode码点,再将每个码点直接转换为单字节(因为U+00B7属于ASCII扩展范围,码点值小于256),最后重新拼接成字节流。

直接用这条命令就能实现:

echo '{"key":"_\u00b7_"}' | ./jq -r '.key | explode | map( . | if . <= 255 then [.] else [] end) | flatten | implode' | xxd

执行后会得到你想要的输出:

0000000: 5fb7 5f0a  _._.

命令细节解释:

  • explode:把目标字符串拆成对应的Unicode码点数组,这里会得到[95, 183, 95](95是下划线的码点,183是U+00B7的十进制值)
  • map( . | if . <= 255 then [.] else [] end):过滤并保留码点≤255的元素(这里所有元素都符合条件)
  • flatten:把嵌套数组扁平化,确保最终是一维码点数组
  • implode:把码点数组重新拼接成字符串,此时jq会将每个≤255的码点直接输出为单字节(而非UTF-8编码),这样就得到了_(0x5f)、0xb7、_(0x5f)的目标字节序列

如果能确认所有字符都在ASCII或Latin-1范围内(码点0-255),还可以简化命令:

echo '{"key":"_\u00b7_"}' | ./jq -r '.key | explode | implode' | xxd

这样就能直接得到你想要的结果,不用再折腾额外工具啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:05:27