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

如何将数组元素动态添加到现有JSON对象(类array.push方法)

解答

JavaScript 普通对象(构造JSON payload使用的Plain Object)没有类似数组push的内置方法,但可以通过方括号动态属性赋值的方式直接给对象注入新的键值对,这也是处理动态键名场景的标准方案。

原代码存在的问题

  • 语法错误:代码中$ { customFields[ix] }是错误写法,模板字符串需要用反引号包裹,且${}中间不能有多余空格;就算修正语法,也不符合传入的customFields数据结构
  • 取值逻辑错误:传入的customFields是单键对象组成的数组,每个元素结构为{自定义字段名: 字段值},并非直接存储字段名或字段值的基础类型数组,直接将数组元素作为键/值赋值会得到不符合预期的结果
  • 缺少边界兼容:没有给customFields设置默认值,当请求体未传该参数时,访问length属性会直接抛出异常

修正后可运行代码

const createIssueApi = async(req, res, next) => {
  try {
    let {
      projectKey,
      summary,
      description,
      issueType,
      customFields = [] // 增加默认空数组,兼容未传参场景
    } = req.body;
    console.log(req.body)

    let jiraIssue = {
      "fields": {
        "project": {
          "key": projectKey
        },
        "summary": summary,
        "description": description,
        "issuetype": {
          "name": issueType
        }
      }
    }

    // 遍历自定义字段数组,注入到fields对象中
    for (const fieldItem of customFields) {
      const [fieldKey, fieldValue] = Object.entries(fieldItem)[0];
      jiraIssue.fields[fieldKey] = fieldValue;
    }

    // 更简洁的写法:直接合并对象,和上面循环效果完全一致
    // jiraIssue.fields = Object.assign(jiraIssue.fields, ...customFields)

    console.log("Jira Issue payload: ", jiraIssue)
    // 后续补充调用Jira接口的业务逻辑即可
  } catch (e) {
    console.log(e)
  }
}

最终生成的payload结构

传入你给出的请求参数时,最终输出的jiraIssue结构完全符合接口要求:

{
  "fields": {
    "project": {
      "key": "JK"
    },
    "summary": "summary text",
    "description": "THIS IS JUST A TEST",
    "issuetype": {
      "name": "Submit a request or incident"
    },
    "customfield_123456": "value1",
    "customfield_7890": "value2"
  }
}

提示:发送请求时不需要手动将对象序列化为JSON字符串,主流HTTP请求库(axios、fetch等)会自动完成序列化处理,直接传入普通JS对象即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:18:18