You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JSONata及JSON中实现数字缩写显示(如1000→1k、100万→1M)

数字缩写显示的实现方案(JSONata + JSON场景)

一、JSONata中实现数字缩写显示

可以通过自定义JSONata函数实现数字到缩写字符串的转换,核心逻辑是根据数值范围匹配对应的后缀(k/M),并完成数值缩放。

基础实现(整数缩写)

创建一个abbreviateNumber函数,对不同区间的数值做处理:

abbreviateNumber := function($num) {
  $num < 1000 ? $string($num) :
  $num < 1000000 ? $string($round($num / 1000)) & "k" :
  $string($round($num / 1000000)) & "M"
}
  • 小于1000的数值直接转为字符串保留原数
  • 1000~999999的数值除以1000取整,拼接"k"
  • 1000000及以上的数值除以1000000取整,拼接"M"

带小数的实现(更精细的显示)

如果需要保留一位小数(如1250显示为1.3k),可以用$formatNumber控制格式:

abbreviateNumber := function($num) {
  $num < 1000 ? $string($num) :
  $num < 1000000 ? $formatNumber($num / 1000, "0.0") & "k" :
  $formatNumber($num / 1000000, "0.0") & "M"
}

使用示例

将函数应用到JSON数据的字段上:

{
  "videoViews": abbreviateNumber(123456),
  "totalEarnings": abbreviateNumber(789000000)
}

输出结果:

{"videoViews": "123k", "totalEarnings": "789.0M"}

二、JSON中以缩写形式替代完整数值

根据场景不同,分为生成JSON时直接生成缩写和处理已有JSON替换数值两种方案:

1. 生成JSON时直接生成缩写字符串

以JavaScript为例,先定义缩写函数,再将数值转换后写入JSON:

function abbreviateNumber(num) {
  if (num < 1000) return num.toString();
  if (num < 1000000) return (num / 1000).toFixed(0) + 'k';
  return (num / 1000000).toFixed(0) + 'M';
}

// 生成带缩写的JSON
const userData = {
  "followers": abbreviateNumber(10000),
  "postImpressions": abbreviateNumber(123000000)
};

console.log(JSON.stringify(userData));
// 输出: {"followers":"10k","postImpressions":"123M"}

2. 处理已有JSON替换数值

如果已有包含原始数值的JSON,可通过递归遍历将数值字段替换为缩写字符串:

function abbreviateNumber(num) {
  if (typeof num !== 'number') return num;
  if (num < 1000) return num.toString();
  if (num < 1000000) return (num / 1000).toFixed(1) + 'k';
  return (num / 1000000).toFixed(1) + 'M';
}

function transformJson(obj) {
  for (const key in obj) {
    if (typeof obj[key] === 'object' && obj[key] !== null) {
      transformJson(obj[key]); // 递归处理嵌套对象
    } else if (typeof obj[key] === 'number') {
      obj[key] = abbreviateNumber(obj[key]);
    }
  }
  return obj;
}

// 示例:转换已有JSON
const originalStats = {
  "socialMetrics": {
    "likes": 2500,
    "shares": 156000,
    "comments": 890
  },
  "totalRevenue": 456700000
};

const transformedStats = transformJson(originalStats);
console.log(JSON.stringify(transformedStats));
// 输出: {"socialMetrics":{"likes":"2.5k","shares":"156.0k","comments":"890"},"totalRevenue":"456.7M"}

内容的提问来源于stack exchange,提问作者Shree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:42:26