Как правильно хранить объекты, которые ссылаются друг на друга? ( круговая структура)

#javascript #json #object

#javascript #json #объект

Вопрос:

если бы у меня было что-то вроде

 let a = {};
let b = {pointingTo: a},
a.pointingTo = b
  

тогда возможно ли сохранить это каким-либо образом в файле .json?

Ответ №1:

Точно нет, потому что вы не можете преобразовать круговую структуру в строки JSON

но вот что вы можете сделать

 let a = {a:1};
let b = {pointingTo: a,b:2};
a.pointingTo = JSON.parse(JSON.stringify(b));
  

вывод должен быть
{"a":1,"pointingTo":{"pointingTo":{"a":1},"b":2}}
затем вы можете преобразовать их в строку и сохранить в файле JSON

используя node.js

 require('fs').writeFileSync('file.json', JSON.stringify(a));
  

использование браузера

 function download(filename, text) {
  var element = document.createElement('a');
  element.setAttribute('href', 'data:text/plain;charset=utf-8,'   encodeURIComponent(text));
  element.setAttribute('download', filename);

  element.style.display = 'none';
  document.body.appendChild(element);

  element.click();

  document.body.removeChild(element);
}

download('file.json', JSON.stringify(a))
  

P.S:
для отступа все, что вам нужно сделать, это JSON.stringify(a, null, 2)

Ответ №2:

Если этот javascript на стороне клиента, то вам придется хранить его в локальном хранилище, если на стороне сервера javascript, я не понимаю, почему это было бы невозможно. По сути, это очень упрощенная версия MongoDB.