将键添加到 json 文件,删除重复项并在 javascript 中写入 json 文件

Posted

技术标签:

【中文标题】将键添加到 json 文件,删除重复项并在 javascript 中写入 json 文件【英文标题】:add keys to a json file, remove duplicates and write to json file in javascript 【发布时间】:2022-01-13 13:26:27 【问题描述】:

我想将另一个 Json 文件中的数据添加到另一个而不覆盖现有文件。我无法再进一步了,控制台总是给我以下信息:

Console output 
Data 
string  
[
    "follow1",
    "follow2",
    "follow3",
    "follow4",
    "[\"follow5\",\"follow6\",\"follow7\",\"follow8\",\"follow9\"]"
]

这是我的代码,我想添加数据但没有方括号和反斜杠。如果有人可以帮助我,那就太好了。非常感谢

const user = require('./user.json');
const oldUser = user.user_follwos["user1"];
const data = require('./data.json');
const toAdd = JSON.stringify(data);

const result = JSON.stringify(toAdd);
oldUser.push(...toAdd.split(' '))
const newData = JSON.stringify(oldUser, null, 4)
console.log('\nData \n' + typeof newData + '  \n' + newData);

这是我的 json 文件

//user.json

  "application_id": "123546789",
  "user_follwos": 
    "user1": [
      "follow1",
      "follow2",
      "follow3",
      "follow4"
    ],
    "user2": [
      "followA",
      "followB",
      "followC",
      "followD"
    ]
  ,
 ...
 ...

//data.json
[
  "follow5",
  "follow6",
  "follow7",
  "follow8",
  "follow9"
]

【问题讨论】:

【参考方案1】:

首先要做的事情你需要json中的两个数据

制作 2 个数组 删除重复项 然后推送数据,不重复。

把所有东西放在一起

let allTogether = data.push(...oldUser);

创建唯一数组

uniq = [...new Set(allTogether )];

最后将此唯一数据设置为特定键

user_follwos.user1 = uniq

希望这是你需要的

更新示例

    let user = 
    "application_id": "123546789",
    "user_follwos": 
    "user1": [
      "follow1",
      "follow2",
      "follow3",
      "follow4"
    ],
    "user2": [
      "followA",
      "followB",
      "followC",
      "followD"
    ]
  
;

let data = [
  "follow5",
  "follow6",
  "follow7",
  "follow8",
  "follow9"
];

let oldUser = user["user_follwos"]["user1"];
console.log(`This is old user array`);
console.log(oldUser);
let allTogether = [];
allTogether.push(...data)
allTogether.push(...oldUser);
console.log(`After we put all together`);
console.log(allTogether);
uniq = [...new Set(allTogether )];
console.log(`Getting unique values`);
console.log(uniq);
oldUser = uniq;
console.log(`Now olds user is`);
console.log(oldUser);

【讨论】:

您好,感谢您的解决方案。当我运行您的解决方案时,我收到此错误 TypeError: number 107 is not iterable (cannot read property Symbol(Symbol.iterator)) 看来这个方法是非常新的代码风格,我会回到电脑上用旧的方式写。随时欢迎您 @daf 现在请运行一个示例,我检查过它可以工作。非常感谢。【参考方案2】:

您不需要对数据变量进行字符串化,因为它是一个 javascript 对象,因此您可以将其连接到现有用户数组的末尾。

const user = require('./user.json');
let oldUser = user.user_follwos["user1"];
const data = require('./data.json');

oldUser = oldUser.concat(data);
const newData = JSON.stringify(oldUser, null, 4);
console.log('\nData \n' + typeof newData + '  \n' + newData);

concat 方法创建一个新的数组对象,因此您可以将结果分配给一个新变量,而不会覆盖您现有的“oldUser”变量。

Data
string
[
    "follow1",
    "follow2",
    "follow3",
    "follow4",
    "follow5",
    "follow6",
    "follow7",
    "follow8",
    "follow9"
]

【讨论】:

【参考方案3】:

在将结果写入文件之前,您应该在最后一次将您的数据结构准确地转换为 JSON。

就目前而言,您正在利用每一个机会将所有内容转换为 JSON。因此,每次您尝试向数据结构中添加一个数组时,您都会添加一个表示该数组的 JSON 字符串。

【讨论】:

以上是关于将键添加到 json 文件,删除重复项并在 javascript 中写入 json 文件的主要内容,如果未能解决你的问题,请参考以下文章

将键:值添加到 .json 文件

处理字符串列表以删除重复项并添加相应的值

将键和值添加到优先级队列中并在 Java 中按键排序

jQuery将小数添加到SELECT,没有重复选项删除

查找列表的“最佳”项并在python中打印第一个实例的索引位置[重复]

查询查找重复项并添加别名列