如何向JSON数组指定对象追加键值对且不丢失原有数据?
问题:在JSON数组的指定对象中添加键值对不丢失原有数据
现有JSON结构如下:
[ { "key1":"value1", "key1.1":"value1.1" }, { "key2":"value2", "key2.1":"value2.1" }, { "key3":"value3", "key3.1":"value3.1" } ]
我希望在第一个或任意一个对象中添加一组键值对(例如"key1.2": "value1.2"),但使用以下代码时,仅会添加新值并丢失所有原有数据:
.then((data)=>{ const value1.2 = data cy.writeFile('cypress/fixtures/array.json', value1.2, { flag: 'a+' }) })
请问如何实现不丢失原有数据的情况下追加键值对?
解决方法
你用flag: 'a+'的方式是错误的,这个参数会把内容直接追加到文件末尾,破坏JSON格式,自然会丢失原有结构。正确的做法是先读取完整的JSON数据,修改指定对象后再重新写入整个文件:
给第一个对象添加键值对的示例代码
cy.readFile('cypress/fixtures/array.json').then((data) => { // 给数组第一个对象(索引0)添加新键值对 data[0]["key1.2"] = "value1.2"; // 重新写入文件,覆盖原有内容(这是更新JSON的正确方式) cy.writeFile('cypress/fixtures/array.json', data); });
修改任意位置对象的示例
如果要给第二个对象添加键值对,只需要修改索引:
cy.readFile('cypress/fixtures/array.json').then((data) => { // 给数组第二个对象(索引1)添加新键值对 data[1]["key2.2"] = "value2.2"; cy.writeFile('cypress/fixtures/array.json', data); });
关键说明
- 绝对不要用
flag: 'a+'处理JSON文件,它会让文件内容变成多个JSON片段的拼接,完全不符合JSON格式规范。 - 必须遵循「读取→修改→完整写入」的流程,才能保证原有数据不丢失,同时正确添加新的键值对。
内容的提问来源于stack exchange,提问作者ruffainn
相关产品推荐
相关产品推荐

