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

如何用JavaScript将JSON中的数字序列化为十六进制格式?

如何用JSON.stringify将数字序列化为十六进制格式?

首先得明确一点:JSON的官方规范里,数字只能以十进制形式表示,所以JSON.stringify默认确实只会输出十进制数字,没法直接生成0x400这种十六进制的数字语法——因为这根本不是合法的JSON格式。

不过根据你的需求,我们可以分两种场景来解决:

场景1:输出字符串形式的十六进制(符合JSON规范)

如果可以接受把数字转成"0x400"这样的字符串值,那用JSON.stringify的第二个参数replacer函数就能轻松实现,这也是最安全、符合规范的做法:

const targetObj = { number: 1024 };
const hexJson = JSON.stringify(targetObj, (key, value) => {
  // 判断当前值是否为数字类型,是的话转成十六进制字符串
  if (typeof value === 'number') {
    return `0x${value.toString(16)}`;
  }
  // 非数字类型保持原样
  return value;
});

console.log(hexJson); // 输出:{"number":"0x400"}

这种方式生成的是标准JSON,后续用JSON.parse解析后,number字段会是字符串类型,如果你需要转回数字,可以在解析时处理,比如:

const parsedObj = JSON.parse(hexJson, (key, value) => {
  if (typeof value === 'string' && value.startsWith('0x')) {
    return parseInt(value, 16);
  }
  return value;
});

场景2:输出非标准的十六进制数字格式(不推荐)

如果你一定要生成{ "number": 0x400 }这种格式(注意这已经不是合法JSON了),那只能在JSON.stringify之后手动用正则替换数字:

const targetObj = { number: 1024, text: "包含数字123的字符串", nested: { num: 255 } };
let rawJson = JSON.stringify(targetObj);

// 正则匹配JSON中的数字值(避开字符串里的数字)
rawJson = rawJson.replace(/"?(\d+)"?(?=([^"]*"[^"]*")*[^"]*$)/g, (match) => {
  const num = parseInt(match, 10);
  return `0x${num.toString(16)}`;
});

console.log(rawJson); // 输出:{"number":0x400,"text":"包含数字123的字符串","nested":{"num":0xff}}

⚠️ 注意:这种方法有明显局限性:

  • 生成的字符串不是合法JSON,JSON.parse无法直接解析,必须自己写自定义解析逻辑
  • 正则表达式可能无法处理所有复杂情况(比如小数、科学计数法的数字),容易出错

所以除非你有特殊的非标准需求,否则优先选择场景1的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:45:42