2015-11-12 3 views
0

У меня возникла проблема с тем, что JSON.stringify не строит все ключи в объекте JSON.Объект JSON не полностью преобразуется в String?

ie. window.performance.getEntries()[0] содержит около 17 ключей. Но при преобразовании в строку результат содержит всего 4 ключа.

Как я могу преобразовать все ключи в window.performance.getEntries()[0]?

Я хочу полный вывод строки window.performance.getEntries(), который является массивом, и я использовал JSON.stringify(window.performance.getEntries()).

Заранее спасибо ..

+0

выборка для 'window.performance.getEntries() [0]' – Grundy

+0

К сожалению, но без примера или экрана, мы не можем помочь вы ... –

+0

Работает для меня 'JSON.parse (JSON.stringify (window.performance.getEntries())). length == window.performance.getEntries(). length == true' вы изучили запись, в которой разборки останавливаются? –

ответ

1

window.performance, кажется, есть собственная toJSON -функции и поэтому может определить, что будет строковой. Вот ответ, и работа вокруг Вашего вопроса из похож вопрос:. https://stackoverflow.com/a/20511811/3400898

«Если stringify метод видит объект, который содержит метод toJSON, он вызывает этот метод, и stringifies значение, возвращенное Это позволяет объект для определения собственного представления JSON ».

0

Как указано другим, это потому, что существует метод toJSON. В основном вам нужно перебрать все индексы массива и каждое свойство объекта.

var adjusted = window.performance.getEntries().map(function (result) {  
    var temp = {}, key; 
    for (key in result) if (key!=="toJSON") temp[key]=result[key]; 
    return temp; 
}); 
console.log(JSON.stringify(adjusted[0])); 
0

Упрощенное решение этой проблемы, которое я нашел

var jsonArray = $.map(performance.getEntries(),function(jsonObj){ 
    var obj = $.extend({},jsonObj); 
    delete obj.toJSON; 
    return obj; 
}); 

JSON.stringify(jsonArray);