2010-05-06 3 views
3

Есть ли у меня шанс сериализовать meta (любой формат, поэтому я могу хранить его в БД)?Сериализация Javascript

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

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

ответ

2

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

var obj1 = {id: "obj1"}; 
var obj2 = {id: "obj2"}; 
obj1.link = "obj2"; 
obj2.link = "obj1"; 
var meta = [obj1, obj2]; 
1

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

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

Тогда вы можете следовать по ссылкам с просто поиском недвижимости:

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

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

1

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"}' 
Смежные вопросы