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

如何在同一JSON对象内部赋值时引用同对象属性拼接字段值

问题解答

首先明确核心边界:标准JSON是纯静态数据序列化格式,本身不支持逻辑执行、上下文引用能力,你示例里带模板字符串、this的写法属于JavaScript对象字面量语法,不是合规JSON,直接按你写的方式写的话,this不会指向当前声明的对象,只会取到外层作用域的this值,根本拿不到同对象下的firstName、lastName属性。

要实现同对象下的属性引用拼接,分场景选对应方法就行:

场景1:写JavaScript对象,不需要输出纯JSON

这是最常见的场景,有两种简单实现:

  • 用getter访问器属性,支持动态同步更新:
const person = {
  id: "1",
  firstName: "John",
  middleName: "Smith",
  lastName: "Doe",
  get fullName() {
    return `${this.firstName} ${this.lastName}`
  }
}

// 直接取值就能拿到拼接结果
console.log(person.fullName) // 输出 John Doe
// 后续修改firstName或lastName,fullName会自动同步最新值
person.firstName = "Jane"
console.log(person.fullName) // 输出 Jane Doe
  • 不需要动态更新的话,初始化对象后单独赋值就行,逻辑更直观:
const person = {
  id: "1",
  firstName: "John",
  middleName: "Smith",
  lastName: "Doe"
}
person.fullName = `${person.firstName} ${person.lastName}`

场景2:需要输出标准JSON格式数据

纯JSON本身存不了动态逻辑,没法在JSON结构内部直接完成引用拼接,只能在序列化/反序列化环节处理:

  • 最常用的方式是先在代码逻辑里把fullName计算成静态字符串,再序列化成JSON,最终得到的JSON就是带完整fullName值的静态结构:
const person = {
  id: "1",
  firstName: "John",
  middleName: "Smith",
  lastName: "Doe"
}
person.fullName = `${person.firstName} ${person.lastName}`
// 序列化后的JSON里fullName字段值就是固定的"John Doe"
const validJson = JSON.stringify(person)
  • 如果需要在JSON文本里保留引用关系,可以自定义占位符规则,反序列化的时候遍历字段做替换,比如你可以在JSON里把fullName写成"${firstName} ${lastName}",解析的时候写个简单的匹配逻辑把占位符替换成对应属性值就行,注意这属于自定义业务逻辑,不是JSON原生支持的特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:33:32