Datadog追踪API需要将64位整数序列化为JSON数字。
{
"span_id": 16956440953342013954,
"trace_id": 13756071592735822010
}
如何使用JavaScript创建包含64位整数的JSON?
Datadog追踪API需要将64位整数序列化为JSON数字。
{
"span_id": 16956440953342013954,
"trace_id": 13756071592735822010
}
如何使用JavaScript创建包含64位整数的JSON?
BigInt
数据类型(通过在数字后缀加上 n
)可以在 JavaScript 中表示大整数,目前已经得到了相当广泛的支持。const o = {
span_id: 16956440953342013954n,
trace_id: 13756071592735822010n
};
BigInt
对象序列化的方法。而且当涉及到JSON序列化时,你的自定义选项非常有限:
JSON.stringify()
一起使用的replacer
函数将允许您自定义BigInt
对象的序列化行为,但不允许将它们序列化为原始(不带引号)字符串。BigInt
原型上实现toJSON()
方法也不起作用。JSON.stringify()
似乎不会在内部递归调用自身,涉及将其包装在代理中的解决方案也不起作用。BigInt
的对象属性调用 toString()
,并委托给 JSON.stringify()
处理其他情况:
const o = {
"span_id": 16956440953342013954n,
"trace_id": 13756071592735822010n
};
const stringify = (o) => '{'
+ Object.entries(o).reduce((a, [k, v]) => ([
...a,
`"${k}": ${typeof v === 'bigint' ? v.toString() : JSON.stringify(v)}`
])).join(', ')
+ '}';
console.log(stringify(o));
case "bigint":
return value.toString();