2014-09-29 2 views
0

Я пытаюсь создать функцию, которая очищает объект JSON, удаляя объекты jQuery и нулевые объекты, строки.

КОД:
Удалить jQuery и нулевые объекты из объекта JSON

JSON.clean = function (object) { 
    /// <summary>Removes jQuery and null values from json object.</summary> 
    var filter = function (obj, doArrays) { 
     $.each(obj, function (key, value) {     
      if (value === "" || value === null) { 
       delete obj[key];     
      } else if (Object.prototype.toString.call(value) === '[object Object]') { 
       filter(value); 
      } else if (doArrays || Array.isArray(value)) { 
       obj[key] = filterArray(value); 
      } 
     }); 
     return obj; 
    }; 

    var filterArray = function (obj) { 
     var result = []; 
     for (var i = 0; i < obj.length; i++) { 
      result.push(filter(obj[i], false)); 
     } 
     return result; 
    }; 

    var result; 
    if ($.isArray(object)) { 
     result = []; 
     for (var i = 0; i < object.length; i++) { 
      result.push(filter(object[i])); 
     }    
    } else { 
     result = filter(object); 
    } 
    return result; 
}; 


ПРОБЛЕМА:
Кодовые падает при попытке очистить массивов в пределах объекта JSON.
Я знаю, что неправильно изменять Array, как это, но это чисто предназначено для объектов JSON с массивом.
Мое предложение по этой проблеме состояло бы в том, чтобы дождаться завершения очистки массива.
Я не знаю, как добиться этого в Javascript, поэтому я надеюсь, что кто-то из вас может помочь!

Я использовал этот источник для основной идеи:
How do I remove all null and empty string values from a json object?

+0

Что * "кодовыми аварии" * означает? Сбой браузера? Кодирует ли код с ошибкой? – 2014-09-29 17:56:21

+0

... и похоже, что вы имеете дело с объектами JavaScript, а не с JSON, поскольку вы не можете представлять конкретные типы объектов в JSON, кроме объектов Array. – 2014-09-29 17:57:08

+0

Когда я запускаю этот код с помощью jQuery 2.1.0, я получаю, что ошибка a не определена в библиотеке javascript, это происходит при попытке вызвать рекурсивную функцию для очистки массива. –

ответ

0

Вы можете использовать JSON.stringify, метод заменителя для преобразования в строку и удалить нуль, а затем преобразовать обратно в формат JSON из строки.

  1. преобразовать объект (имеющий значение null) в строку = JSON.stringify (obj, param ...);
  2. назад к объекту = JSON.parse ("строковое значение");

Некоторые полезно ссылку

  1. Recursively remove null values from JavaScript object
  2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
+0

Это сделает больше, чем просто удалит объекты «null» и jQuery. И не полная сериализация, за которой следует разбор результатов, похоже, излишний? – 2014-09-29 17:55:45

+0

@squint, это зависит от размера объекта. Я просто предлагал путь к достижению. Если размер объекта меньше и имеет больше нулевых значений, то я думаю, что это хороший способ пойти, что сказать? –

+0

Да, для небольших объектов разница не будет замечена. – 2014-09-29 18:00:00

-1
var reqArr = { 
    "a": { 
    "id": "1", 
    "name": '', 
    "first_name": "Jason", 
    "last_name": "Davis", 
    "is_admin": "1", 
    "gravatar": "31b64e4876d603ce78e04102c67d6144" 
}, 
"b": '', 
"c": { 
    "id": "1702c3d0-df12-2d1b-d964-521becb5e3ad", 
    "name": "Jeff", 
    "first_name": "", 
    "last_name": "", 
    "is_admin": "1", 
    "gravatar": "5359bf585d11c5c35602f9bf5e66fa5e" 
    } 
}; 

for(var key in reqArr) { 
    if (reqArr[key] == undefined || reqArr[key] == '') { 
     delete reqArr[key]; 
    } 
    for(var inKey in reqArr[key]) { 
     if (reqArr[key][inKey] == undefined || reqArr[key][inKey] == '') { 
      delete reqArr[key][inKey]; 
     } 
    } 
} 
Смежные вопросы