2016-03-28 18 views
0

Aşağıdaki verileri içeren bir JSON'um var, javascript'te işlediğimde, her öğeden gitmek istedim ve NULL ise kaldır Bu, eğer bir dizi ise, alt dizide dolaşmak ve içindeki boş öğeleri bulmak ve kaldırmak istedim. Aşağıdaki kodu denedim, ancak bir öğenin dizinin içinde bir dizi olup olmadığını tanımak başarısız oldu.Bir dizideki öğenin bir dizi olup olmadığını kontrol edin javascript/jquery

KODU:

  for (var key in data) { 

       if (!data[key]) { 
        delete data[key]; 
       }else if(data.key && data.key.constructor === Array){ 
         var subArray = data[key]; 
         for(var subKey in subArray){ 
          if (!data[key]) 
          delete subArray[subKey]; 
        } 
       } 

      } 

JSON:

{ 
    confirmDate : "2016-03-27T23:24:36.338Z", 
    earliestPossibleInhandDate : "2016-03-28T23:24:36.338Z", 
    eventStartTime : null, 
    lastChanceDate : null, 
    latestPossibleInhandDate : null, 
    metas : Array[1], 
    onSaleDate : "2016-03-28T23:24:41.461Z" 
    primaryCategoryId : "114", 
    secondaryGroupings : Array[2], 
    status : "active" 
} 

DÜZENLEME: Modifiye JSON

{ 
    "secondaryGroupings": [{ 
     "groupingId": "720072", 
     "status": "active" 
    }, { 
     "groupingId": null, 
     "status": null 
    }], 
    "secondaryPerformers": [{ 
     "status": null 
    }], 
    "metas": [{}], 
    "status": "active", 
    "primaryCategoryId": "7667", 
    "eventStartTime": null, 
    "lastChanceDate": null, 
    "onSaleDate": "2016-03-29T00:25:56.670Z", 
    "confirmDate": "2016-03-28T00:25:56.670Z", 
    "earliestPossibleInhandDate": "2016-03-29T00:25:56.670Z", 
    "latestPossibleInhandDate": null 
} 
+0

Bu JSON ile neler var? Doğrulamayı denediniz mi? Herhangi bir virgül görmüyorum ve dizi sözdizimi yanlış. http://jsonlint.com/ –

+0

sadece bir örnek JSON, ben krom konsolundan kopyaladım :) – user1614862

+0

Kinda JSON ayrıştırma ile gerçek bir yardım istiyorsanız, sadece geçerli JSON vermek zorunda, sadece ... – MattSizzle

cevap

0
for (var key in data) { 
    // you are deleting all the null values 
    if (!data[key]) { 
     delete data[key]; 
    } 
    // here key is a variable so you must access key as data[key] with bracket notation 
    // also the first check here is a bit redundant as you already deleted the null values 
    else if(data.key && data.key.constructor === Array){ 
      var subArray = data[key]; 
      // you can go over arrays like this but it is better to do a normal for loop or use Array.prototype.forEach because an array is not a key value store 
      for(var subKey in subArray){ 
       if (!data[key]) 
       delete subArray[subKey]; 
     } 
    } 
} 

// something like this.. 
for (var key in data) { 
    if (!data[key]) { 
     delete data[key]; 
    } 
    if (data[key].constructor === Array){ 
     var subArray = data[key]; 
     subArray.forEach(function(item) { 
     // I am not sure what your inner array looks like is it an array of objects? 
      // do stuff with each item 
     }) 
    } 
} 

// this works for your dataset but it ain't pretty 
function stripData(data) { 
    if (Array.isArray(data)){ 
    data.forEach(function(item) { 
     stripData(item); 
    }) 
    return data.filter(function(item) { 
     return Object.keys(item).length > 0; 
    }) 
    } else if (typeof data === 'object') { 
    for (key in data) { 
     if (data[key] === null || data[key].length === 0) delete data[key]; 
     else data[key] = stripData(data[key]); 
    } 
    return data; 
    } 
    for (key in data) { 
    if (data[key].length === 0) delete data[key] 
    } 
    return data; 
} 

data = stripData(stripData(data)) 
+0

Benim iç dizi sadece basit değerlere sahip olacaktır. İç dizimdeki tüm öğeler NULL'lerden dolayı kaldırılırsa, o zaman bu iç diziyi ana JSON nesnesinden kaldırmak istedim. – user1614862

+0

İç dizinin bir örneğini verebilir misiniz? – joemillervi

+0

Sorunun düzenleme bölümünde eksiksiz bir JSON sağlandı. Orada, nulls ile bir girdiyi ikincil Gruplar'dan kaldırmak ve tüm boş girişlere sahip olduğundan ve zaten boş olan metas dizisini sildiğinden, ikincilPerformer'leri kendiliğinden kaldırmak istiyorum. – user1614862

0
function removeNull(obj,key){ 
    var thisIsNull=false; 
    if(key==null||key==undefined){ 
     if(isJson(obj)){ 

      for(var i in obj){ 
       thisIsNull=removeNull(obj,i); 
      } 
     } 
    }else if(key !=null){ 
     if(isJson(obj[key])){ 
      var jsonIsNull=true; 
      for(var i in obj[key]){ 
       if(obj[key][i]!=null){ 
        jsonIsNull=false; 
       } 
       thisIsNull=removeNull(obj[key],i); 
      } 
      if(jsonIsNull){ 
       delete obj[key]; 

       thisIsNull=true;    } 
     }else if(obj[key]==null){ 
      delete obj[key]; 
     }else if(obj[key] instanceof Array){ 
      var arrIsNull=true; 
      for(var i in obj[key]){ 
       if(obj[key][i]!=null){ 
        arrIsNull=false; 
        thisIsNull=removeNull(obj[key],i); 
       }else{ 
        delete obj[key][i]; 
       } 
      } 
      if(arrIsNull){ 
       thisIsNull=true; 
       delete obj[key]; 
       thisIsNull=removeNull(obj); 
      } 
     } 


    } 
    if(thisIsNull){ 
     removeNull(obj); 
    } 
    return thisIsNull; 

} 

function isJson(obj){ 
    var isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; 
    return isjson; 
} 
+0

removeNull (jsonObj); –

0
function deleteNulls(json) { 
    for (var key in json) { 
     if (Array.isArray(json[key])) { 
      json[key].forEach(function (Obj, index, Array) { 
       for (var property in Obj) { 
        if (Obj[property] == null) { 
         Array.splice(index, 1); 
        } 
       } 
      }); 
     } 
     if (json[key] == null || json[key].length == 0) {  
      delete json[key]; 
     } 
    } 
} 

deleteNulls(myObject); 
İlgili konular