Удалить пустые свойства из JSON

#marklogic

#marklogic

Вопрос:

Я хотел бы удалить все пустые (например, «a» = «»») свойства JSON из раздела экземпляра внутри конверта. Я написал приведенный ниже код, но он не работает. Кто-нибудь может посоветовать мне, как заставить это работать?

 let doc = fn.doc(URI);

function cleanProp(doc) {
  for (var propName in doc) { 
    if (doc[propName] === null || doc[propName] === undefined || doc[propName] === "") {
      delete doc[propName];
    }
  }
}

cleanProp(doc);
  

Комментарии:

1. Я пробовал, и это работает, что не так? каково значение doc?

2. URI — это uri фактического документа, например /testdata/aaa.json, который состоит из заголовков общего шаблона конверта.

3. это будет так же, как это let doc = {«a»:»»,»b»:»1″};?

4. На самом деле вот так, {«envelope»:{«headers»:[], «triples»:[], «instance»:{«A»:»22″, «B»:»»»}}; Я хотел бы очистить все свойства B из этого JSON.

5. о, вот почему. Я понял

Ответ №1:

Попробуйте это. надеюсь, это поможет

ПРИМЕЧАНИЕ: Это работает только для заданных переменных, если вы ищете динамический цикл, вы можете выполнить рекурсивный цикл.

 let doc =  {"envelope":{"headers":[], "triples":[], "instance":{"A":"22", "B":""} }};

function cleanProp(doc) {
  for (var propName in doc) { 
  	for(var d in doc[propName]){
    		if (!isEmpty(doc[propName][d]) || doc[propName][d].length != 0) {

         for (var f in doc[propName][d]){
         			if (doc[propName][d][f] === null || doc[propName][d][f] === undefined || doc[propName][d][f] === "") {
              delete doc[propName][d][f];
              }
         }
      }
    }
  }
}

cleanProp(doc);

console.log(doc);

function isEmpty(obj) {
    for(var key in obj) {
        if(obj.hasOwnProperty(key))
            return false;
    }
    return true;
}