◆ 今の所標準で対応してないので replacer で既存の型で表現する
◆ parse するときに既存の型で表したものなら元の型に戻す

普通に JSON 化しようとすると

JSON.stringify(2n**1000n)
Uncaught TypeError: Do not know how to serialize a BigInt

というエラーになります

なので replacer を使って文字列型で「数字+n」という形式にします

const bi = 2n ** 1000n
const obj = {
bi,
num: 100,
str: "100",
}
const json = JSON.stringify(obj, (k, v) => typeof v === "bigint" ? v.toString() + "n" : v)
const obj2 = JSON.parse(json, (k, v) => typeof v === "string" && v.match(/^[0-9]+n$/) ? BigInt(v.slice(0, -1)) : v)

console.log(obj, obj2)
// {bi: 10715086071862673209484250490600018105614048117055…196477686542167660429831652624386837205668069376n, num: 100, str: "100"}
// {bi: 10715086071862673209484250490600018105614048117055…196477686542167660429831652624386837205668069376n, num: 100, str: "100"}

console.log(json)
// {"x":"179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216n","y":1}

1n という文字列でも BigInt 型になるので 数字と n が普通の文字列にありえるなら

{
bi: {
__json_special_value__: true,
type: "BigInt",
value: "123",
}
}

みたいなオブジェクトで特殊な値であることや型をもたせておくのもいいかもしれません