如何在同一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
相关产品推荐
相关产品推荐

