如何解析JSON数据(类型:BigInt)在TypeScript中

xjreopfe  于 2023-03-24  发布在  TypeScript
关注(0)|答案(3)|浏览(166)

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

如何在代码中简单地管理这个bigint

iq0todco

iq0todco1#

如果你想让它可靠和干净,那么总是把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 );
hpxqektj

hpxqektj2#

我想你需要做这样的事,

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。

wj8zmpe1

wj8zmpe13#

你可以试试我的库,它可以解决这个问题:https://www.npmjs.com/package/json-with-bigint
示例:

import { JSONParse, JSONStringify } from 'json-with-bigint';

const userData = {
  someBigNumber: 9007199254740991n
};

localStorage.setItem('userData', JSONStringify(userData));

const restoredUserData = JSONParse(localStorage.getItem('userData'));

它支持往返操作,因此您可以安全地对BigInt值进行字符串化和解析,而不会丢失任何内容。
它的工作原理与原生JSON.parse/JSON.stringify相同,可以处理所有非BigInt的内容。

相关问题