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

如何使用jq将对象数组中存储为字符串的数字转换为数值类型?

解决方案

1. 基于字段语义的精准转换(推荐)

如果明确知道哪些字段应该是数值类型,直接针对这些字段转换,能100%避免破坏邮编这类标识性数字字符串。

示例代码:

const data = [
  {
    "firstName": "Charles",
    "lastName": "Doe",
    "age": "65",
    "postalCode": "943",
    "habitants": "5"
  },
  {
    "firstName": "Charles",
    "lastName": "Doe",
    "age": 41,
    "postalCode": "94103",
    "habitants": "2"
  },
  {
    "firstName": "Charles",
    "lastName": "Doe",
    "age": 23,
    "postalCode": "94103",
    "habitants": "3",
    "animals": "1"
  }
];

// 定义需要转为数值的字段列表
const numericFields = ['age', 'habitants', 'animals'];

const convertedData = data.map(item => {
  const newItem = {...item};
  numericFields.forEach(field => {
    if (newItem.hasOwnProperty(field) && typeof newItem[field] === 'string') {
      const num = Number(newItem[field]);
      // 仅转换有效数字
      if (!isNaN(num) && isFinite(num)) {
        newItem[field] = num;
      }
    }
  });
  return newItem;
});

console.log(convertedData);

2. 通用自动判断转换(需谨慎)

如果无法提前确定字段列表,可通过规则自动判断,但必须配合排除列表避免破坏标识类字符串(如邮编、身份证号)。

示例代码:

const data = [/* 你的原始数据 */];

// 定义无需转换的字段(如邮编)
const excludeFields = ['postalCode'];

const convertedData = data.map(item => {
  const newItem = {...item};
  Object.keys(newItem).forEach(key => {
    if (excludeFields.includes(key)) return;
    const value = newItem[key];
    if (typeof value === 'string') {
      // 匹配纯数字字符串(支持整数、浮点数、正负号)
      if (/^-?\d+(\.\d+)?$/.test(value)) {
        const num = Number(value);
        if (!isNaN(num) && isFinite(num)) {
          newItem[key] = num;
        }
      }
    }
  });
  return newItem;
});

console.log(convertedData);

关键说明

  • 通用判断无法自动区分“数值型字符串”和“标识型数字字符串”,必须手动指定排除字段,否则会丢失类似"0943"这类字符串的前导零。
  • 含非数字字符的字符串(如"123abc")会保留原格式,不会被转换。

转换后结果示例

以第一种方案为例,最终数据如下:

[
  {
    "firstName": "Charles",
    "lastName": "Doe",
    "age": 65,
    "postalCode": "943",
    "habitants": 5
  },
  {
    "firstName": "Charles",
    "lastName": "Doe",
    "age": 41,
    "postalCode": "94103",
    "habitants": 2
  },
  {
    "firstName": "Charles",
    "lastName": "Doe",
    "age": 23,
    "postalCode": "94103",
    "habitants": 3,
    "animals": 1
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:33:19