Сериализация Javascript - PullRequest
       14

Сериализация Javascript

3 голосов
/ 06 мая 2010

Есть ли у меня возможность сериализации мета (любой формат, чтобы я мог сохранить его в БД)?

var obj1 = {};
var obj2 = {};
obj1.link = obj2;
obj2.link = obj1;
var meta = [obj1, obj2];

Насколько я понимаю, проблема в том, что JSON сериализует ссылки объектов на объекты.

Ответы [ 3 ]

2 голосов
/ 06 мая 2010

Да. Вам нужно будет дать вашим объектам какой-то идентификатор и использовать его в качестве ссылки.

var obj1 = {id: "obj1"};
var obj2 = {id: "obj2"};
obj1.link = "obj2";
obj2.link = "obj1";
var meta = [obj1, obj2];
1 голос
/ 06 мая 2010

JSON-сериализацию таких ссылок можно легко избежать с помощью функции замены:

var a = {}, b = {};
var d = {
    a: a, 
    b: b, 
    c: "c"
};

JSON.stringify(d, function(key, value) {
    if (value === a || value === b) {
        return;
    }
    return value;
});
// returns '{"c":"c"}'
1 голос
/ 06 мая 2010

Один из подходов состоит в том, чтобы использовать объект в качестве внешнего контейнера, используя ключи объекта в качестве идентификаторов:

var objs = { 
   obj1: { link: "obj2" }, 
   obj2: { link: "obj1" } 
}

Затем вы можете переходить по ссылкам, просто просматривая свойство:

var o1 = objs["obj1"];
var o2 = objs[o1.link];

И это преобразуется в JSON без каких-либо преобразований

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...