1

I want to add data from another Json file to another without overwriting the existing one. I just can't get any further, the console always gives me the following:

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

This is my code, I would like to add the data but without square brackets and without backslashes. It would be really nice if someone could help me. Thanks very much

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);

and here are my json files

//user.json
{
  "application_id": "123546789",
  "user_follwos": {
    "user1": [
      "follow1",
      "follow2",
      "follow3",
      "follow4"
    ],
    "user2": [
      "followA",
      "followB",
      "followC",
      "followD"
    ]
  },
 ...
 ...
}
//data.json
[
  "follow5",
  "follow6",
  "follow7",
  "follow8",
  "follow9"
]
da f
  • 13
  • 2

3 Answers3

1

You should convert your data structure to JSON exactly once at the very end, immediately before you write the result to the file.

As it stands, you are converting everything to JSON at every opportunity. So every time you try to add, say, an array to your data structure you instead add a string of JSON representing that array.

Quentin
  • 914,110
  • 126
  • 1,211
  • 1,335
1

You don't need to stringify your data variable because it is a javascript object so you can just concat it to the end of your existing user array.

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);

The concat method creates a new array object so you could assign the result to a new variable without overwriting your existing "oldUser" variable.

Data
string
[
    "follow1",
    "follow2",
    "follow3",
    "follow4",
    "follow5",
    "follow6",
    "follow7",
    "follow8",
    "follow9"
]
Philip Coulter
  • 196
  • 2
  • 3
0

First of all to do something you need both data in json

  • Make 2 arrays
  • Remove duplicates
  • Then push data without duplicates.

Put everything together

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

Create unique array

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

Finally set this unique data to specific key

user_follwos.user1 = uniq

Hope this is what you need

Update with example

    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);
Archil Labadze
  • 4,049
  • 4
  • 25
  • 42
  • Hey, thank you for your solution. When i run your solution i get this error TypeError: number 107 is not iterable (cannot read property Symbol(Symbol.iterator)) – da f Dec 10 '21 at 08:32
  • Seems this method is in very new code style I’ll come back to computer and write in older way. You welcome any time – Archil Labadze Dec 10 '21 at 08:38
  • @daf Please run an example now it will work I checked. Thanks a lot. – Archil Labadze Dec 10 '21 at 08:54