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

动态向JSON特定子节点添加子项报错:TypeError: push不是函数

解决push is not a function错误:给JSON对象添加子节点的正确方式

嘿,我一眼就看出问题所在了——你把对象和数组的操作搞混啦!

错误根源

你代码里的this.myObj.properties是一个JavaScript对象(用{}定义的键值对结构),而push()是数组([])专属的方法。对象根本没有push这个方法,所以调用它肯定会报错ERROR TypeError: this.yourJsonSchema.properties.push is not a function。

正确的添加方式

要给properties这个对象添加新的子节点,直接给它赋值新的属性就行,有两种常用写法:

1. 固定字段名的情况

如果你确定要加的字段是email,直接用点语法赋值:

addField(){
  // 直接给properties对象添加email属性
  this.myObj.properties.email = { 'type': 'string' };
}

2. 动态字段名的情况

如果字段名是变量(比如从用户输入获取),用方括号语法:

addField(){
  const newFieldName = 'email'; // 这里可以是动态生成的字段名
  this.myObj.properties[newFieldName] = { 'type': 'string' };
}

额外的类型修正提醒

你一开始把myObj声明为any[](数组类型),但后面却赋值成了一个对象,这会导致TypeScript的类型不匹配警告。最好把类型声明改成对象类型:

// 改成任意对象类型,或者更严谨地定义接口
myObj: any = {};

// (可选)更推荐的方式:定义接口来约束结构
interface SchemaProperty {
  type: string;
}

interface MySchema {
  type: string;
  properties: Record<string, SchemaProperty>;
}

myObj: MySchema = {
  "type": "object",
  "properties": {
    "first_name": { "type": "string" },
    "last_name": { "type": "string" },
  }
};

这样修改后,你就能顺利给properties添加新的子节点啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:31:01