Stringify объект временной метки

Как я могу JSON.stringify использовать следующую структуру данных?

var Records = {
    1357775376232: {
        pageX: 0,
        pageY: 0,
        scrollLeft: 0,
        scrollTop: 0,
        target: #document,
        type: null,
        value: undefined
    },
    1357775376243: {
        pageX: 69,
        pageY: 10,
        scrollLeft: 0,
        scrollTop: 0,
        target: <a>,
        type: "click",
        value: ""
    }
    // ...etc...
};

person yckart    schedule 09.01.2013    source источник
comment
Что такого в JSON.stringify(), что не работает?   -  person Pointy    schedule 10.01.2013
comment
@Pointy Нет, я получаю Uncaught TypeError: Converting circular structure to JSON И, это тоже не помогает...   -  person yckart    schedule 10.01.2013
comment
Ну, это означает, что у вас есть несериализуемый объект. Если бы вы опубликовали, как точно выглядит объект без части ... etc ..., тогда кто-нибудь мог бы помочь.   -  person Pointy    schedule 10.01.2013
comment
Что такое #document и <a>? Если они являются ссылками на узлы DOM, их нельзя сериализовать.   -  person bfavaretto    schedule 10.01.2013
comment
@bfavaretto Да, вы правы ... есть ли обходные пути для этого?   -  person yckart    schedule 10.01.2013
comment
Как насчет замены их строками селектора?   -  person bfavaretto    schedule 10.01.2013


Ответы (2)


Похоже, этот объект содержит ссылки на document и на тег a. Вы не сможете сериализовать его, пока не удалите такие ссылки.

Простое решение:

var arrayWithRefs = [...];
var arrayWithout = [];

for (var i = 0; i < arrayWithRefs.length; i++) {
  arrayWithout[i] = {
    safeProperty: arrayWithRefs[i].safeProperty;
    // copy whatever you want, omitting document references
  };
}

var serialized = JSON.stringify(arrayWithout);

И, конечно же, есть библиотеки, которые могут помочь вам выбрать именно те свойства, которые вам нужны. Я бы рекомендовал подчеркивание (общего назначения) или крио (именно то, что вы пытаетесь сделать):

person hunterloftis    schedule 10.01.2013
comment
Полное раскрытие, я автор этой библиотеки: github.com/hunterloftis/cryo - ' JSON на стероидах» — он позволяет без проблем делать такие вещи, как преобразование элементов DOM в строки. Полная замена JSON.stringify/JSON.parse с большим количеством модульных тестов. - person hunterloftis; 10.01.2013

Вместо простого объекта используйте XPath для элементов.

person yckart    schedule 14.01.2013