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

如何将含特殊键的JSON对象映射到Stocks类实例?

自定义JSON键名到Stocks类实例的映射方案

问题背景

现有结构固定的JSON数组,需要将其中每个对象转换为自定义Stocks类的实例,要求将JSON中的HS字段映射到类的model属性、__EMPTY映射到quantity、__EMPTY_1映射到type,而非直接保留原JSON的键名。

输入JSON数组

var inputJson = [{
    "HS": "   ",
    "__EMPTY": 1,
    "__EMPTY_1": "    Pcs."
},
{
    "HS": " RAS222PCAIBA",
    "__EMPTY": 1,
    "__EMPTY_1": "    Pcs."
},
{
    "HS": "     SRK20CSS-S6/A1.6T",
    "__EMPTY": -4,
    "__EMPTY_1": "    Pcs."
}]

原Stocks类与实现代码

原类定义(直接使用Object.assign导致键名不匹配):

class Stocks {
  model;
  quantity;
  type;
  constructor(data) {
    Object.assign(this, data);
  }
}

当前创建实例的代码:

var completeStock = [] ; 
$.each(inputJson, function( index, value ) {
  completeStock.push(new Stocks(value));
});

解决方案

方案1:修改Stocks构造函数,直接在内部完成映射

直接在构造函数中手动处理键名映射,还可以顺便做字段清理(比如去除字符串前后空格):

class Stocks {
  model;
  quantity;
  type;
  constructor(data) {
    // 映射并清理字段
    this.model = data.HS?.trim() || '';
    this.quantity = data.__EMPTY;
    this.type = data.__EMPTY_1?.trim() || '';
  }
}

创建实例的代码无需大幅修改,用原生map或原jQuery写法都可以:

// 原生JS写法(推荐)
const completeStock = inputJson.map(item => new Stocks(item));

// 保留jQuery写法
var completeStock = [] ; 
$.each(inputJson, function( index, value ) {
  completeStock.push(new Stocks(value));
});

方案2:单独编写映射函数,保持构造函数简洁

如果希望构造函数只负责接收标准结构的数据,可以先写一个转换函数处理JSON到目标结构的映射:

// 转换函数:将原始JSON对象转为符合Stocks属性的对象
function transformStockData(rawItem) {
  return {
    model: rawItem.HS?.trim() || '',
    quantity: rawItem.__EMPTY,
    type: rawItem.__EMPTY_1?.trim() || ''
  };
}

此时Stocks类可以保留原结构,通过转换后的对象创建实例:

class Stocks {
  model;
  quantity;
  type;
  constructor(data) {
    Object.assign(this, data);
  }
}

// 创建实例
const completeStock = inputJson.map(item => new Stocks(transformStockData(item)));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:27:35