【问题标题】:How to parse a JSON data (type : BigInt) in TypeScript如何在 TypeScript 中解析 JSON 数据(类型:BigInt)
【发布时间】:2020-10-13 18:41:51
【问题描述】:

我有一个简单的请求,但似乎比预期的要难。我必须从 JSON 流中解析 bigint。值为990000000069396215。在我的代码中,这个值在 TypeScript 中声明如下:id_address: bigint。但这不起作用,该值被截断,并且不返回类似9900000000693962100

我怎样才能在我的代码中简单地管理这个bigint

【问题讨论】:

  • JSON 表示法不支持“bigint”值。只是老式的 JavaScript 数字。您可以将其表示为字符串,然后使用您自己的代码将其转回 bigint。
  • JSON 规范实际上并没有指定任何关于数字精度的内容,因此从技术上讲,您可以拥有一个 bigint。但是,像 JSON.parse 这样的内置函数将很难解决这个问题,因为我看不到任何方法可以改变数字的解析方式。
  • @Jacob 是的,我想这是真的,但据我所知,所有现代浏览器都将 JSON 数字字符串解析为纯数字。

标签: javascript json typescript bigint


【解决方案1】:

我猜你需要做这样的事情,

export interface Address {
id_address: string;
}

然后在你的代码中你需要做的实现这个接口的地方,

const value = BigInt(id_address);  // I am guessing that inside your class you have spread your props and you can access id_address. So inside value you will get your Big integer value.

Reference 代表 BigInt。

【讨论】:

  • 感谢您的回答。我并不特别想要 BigInt,但我只想读取值。当我尝试记录该值时,它已经被截断。我这样记录它JSON.stringify(value, (_, v) => typeof v === 'bigint' ? `${v}n` : v)
  • 谢谢。如果您的问题得到解决,请接受答案以供将来参考:)
  • 没有解决。我使用 Needle 请求服务,当我记录值时,它已经被截断了......不知道该怎么做
【解决方案2】:

如果你想让它可靠和干净,那么总是将 bigint 值字符串化/解析为对象:

function replacer( key: string, value: any ): any {
    if ( typeof value === 'bigint' ) {
        return { '__bigintval__': value.toString() };
    }
    return value;
}

function reviver( key: string, value: any ): any {
    if ( value != null && typeof value === 'object' && '__bigintval__' in value ) {
        return BigInt( value[ '__bigintval__' ] );
    }
    return value;
}

JSON.stringify( obj, replacer );

JSON.parse( str, reviver );

【讨论】:

    猜你喜欢
    • 2015-12-09
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2018-10-02
    • 2021-07-05
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多