如何在JSON对象数组中每个对象的指定位置添加新元素
首先明确前提:JSON 标准本身没有规定对象键的存储顺序,但目前绝大多数现代编程语言的运行环境、JSON 序列化/反序列化工具都遵守「按键插入顺序保留排列」的规则,只要你的上下游处理链路都符合这个规则,就可以实现指定位置插入键值对的需求。
实现方案
方案1:通用动态插入(适合对象结构不固定的场景)
通过将对象转为键值对数组,插入指定位置后再转回对象即可,JS 实现示例如下:
const originArr = [ { key1: "val1", key2: "val2", key3: "val3" }, { key1: "valA", key2: "valB", key3: "valC" } ] // 要插入的键值对 const newEntry = ["newKey", "newValue"] // 插入位置:插在第2位对应数组索引1(数组索引从0开始计数) const insertIndex = 1 const result = originArr.map(item => { const entries = Object.entries(item) entries.splice(insertIndex, 0, newEntry) return Object.fromEntries(entries) })
如果运行环境不支持 ES2019 的 Object.fromEntries,可以用下面的兼容写法替换转回对象的逻辑:
return entries.reduce((obj, [key, val]) => { obj[key] = val return obj }, {})
方案2:手动展开拼接(适合对象结构固定的场景)
如果提前知道对象的所有键,可以直接用展开运算符手动控制顺序,性能更好逻辑更直观:
const result = originArr.map(({key1, key2, key3}) => ({ key1, newKey: "newValue", key2, key3 }))
注意事项
如果处理后的 JSON 需要传递给第三方系统,一定要确认对方的 JSON 解析逻辑会保留键的顺序:比如 Python 3.7+ 版本的默认字典支持保留插入顺序,老版本 Python 或者部分老旧的序列化工具会自动打乱键顺序,这种场景下不建议依赖对象键顺序,可直接改用二维数组存储键值对来保证顺序,结构示例:[["key1", "val1"], ["newKey", "newValue"], ["key2", "val2"]]。
内容的提问来源于stack exchange,提问作者Jørn
相关产品推荐
相关产品推荐

