HarmonyOS鸿蒙Next中JsonBigInt的出处来自哪里?

HarmonyOS鸿蒙Next中JsonBigInt的出处来自哪里? 由于axios内部会对后端返回的数据做JSON.parse操作,会导致超长数字的精度丢失。通过重写transformResponse方法,修改返回数据,导入json-bigint包,使用JsonBigInt.parse(data)转换返回数据。

import axios from '@ohos/axios';

axios<string, AxiosResponse<string>, null>({
    url: 'https://www.xxx.com/info',
    method: 'get',
    responseType: 'array_buffer', 
    transformResponse:(data)=>{
      return JsonBigInt.parse(data)
    }
  }).then((res: AxiosResponse) => {
   // 处理请求成功的逻辑
  })

请问上述代码中JsonBigInt的出处来自哪里(三方库吗?)?


更多关于HarmonyOS鸿蒙Next中JsonBigInt的出处来自哪里?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

来自json-bigint三方库。

import JSONBigInt from '[@ohmos](/user/ohmos)/json-bigint';

更多关于HarmonyOS鸿蒙Next中JsonBigInt的出处来自哪里?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


JsonBigint 来自 json-bigint-arkts 库,基于json-bigint 原库1.0.0版本进行适配。

所有功能代码已经转换为ArkTS文件,你可以在OpenHarmony三方库中心仓找到它。

使用 ohpm 安装:

ohpm i json-bigint-arkts

使用示例:

import JsonBigint from 'json-bigint-arkts';

const json = '{ "value" : 9223372036854775807, "v2": 123 }';
console.log('Input:', json);
console.log('');

console.log('node.js built-in JSON:');
let r: ESObject = JSON.parse(json);
console.log('JSON.parse(input).value : ', r.value.toString());
console.log('JSON.stringify(JSON.parse(input)):', JSON.stringify(r));

const jsonBigint = new JsonBigint();
console.log('\n\nbig number JSON:');
let r1: ESObject = jsonBigint.parse(json);
console.log('JSONbig.parse(input).value : ', r1.value.toString());
console.log('JSONbig.stringify(JSONbig.parse(input)):', jsonBigint.stringify(r1));

expect(r1.value.toString()).assertEqual('9223372036854775807');
expect(jsonBigint.stringify(r1)).assertEqual(`{"value":9223372036854775807,"v2":123}`);

JsonBigInt

JsonBigInt是HarmonyOS Next中用于处理JavaScript大整数的API,属于ArkTS语言规范的一部分。它主要用于解决JavaScript中Number类型无法精确表示超过53位整数的问题,通过BigInt类型提供大整数运算支持。该API的出处是ECMAScript 2020标准中的BigInt规范,鸿蒙在此基础上进行了原生集成和优化。

在HarmonyOS Next的ArkTS/TypeScript开发环境中,JsonBigInt 并非系统内置的API,而是一个第三方JavaScript/TypeScript库

其核心出处和用途如下:

  1. 库的来源:它是一个名为 json-bigint 的第三方npm包。这个库专门用于解决JavaScript/TypeScript中JSON.parse()在处理超出Number安全整数范围(即-2^53+12^53-1,或 -90071992547409919007199254740991)的大整数时,会发生精度丢失的问题。

  2. 工作原理json-bigint 库提供了一个parse方法(在代码中通常被导入为JsonBigInt或类似对象)。该方法在解析JSON字符串时,会将原本可能丢失精度的长数字字符串自动转换为JavaScript的 BigInt 类型,从而完整保留其精度。

  3. 在HarmonyOS项目中的使用

    • 你需要通过HarmonyOS项目对应的包管理器(如ohpm)或通用的npm,将此库作为依赖安装到你的工程中。
    • 安装命令通常类似于:ohpm install json-bigintnpm install json-bigint
    • 安装完成后,你需要在代码文件中使用import语句导入它,才能像示例中那样使用JsonBigInt.parse方法。

因此,示例代码中JsonBigInt的功能完全依赖于你主动安装并导入的json-bigint这个第三方库,HarmonyOS Next本身不提供同名内置对象。

回到顶部