2017-12-02 3 views
1

Ich bin neu in Javascript und ich habe ein Problem festgestellt Ich brauche alle Null-Werte aus einer JSON-Datei zu entfernen. Aber ich konnte es nicht bekommen Ich habe verschiedene Methoden ausprobiert, die ich auf der Seite gefunden habe, aber sie funktionieren nicht für mich. Eine der Möglichkeiten, die ich unten gefunden habe. Ich habe nur ein Problem, wie ich vor der JSON-Datei gesagt habe Ich bekomme es mit JSON.Stringify und mit dem Code, der Null entfernt, bekomme ich dieses "{\" Name \ ": \" Ann \ ", \" children \ ": [null, {\ "Name \": \ "Beta \", \ "Kinder \": [null, null, null]}, null]} ".Entfernen Sie Nullwerte aus JSON-Datei Javascript

function Parent(name){ 
    this.name = name; 
    this.children=new Array(null,null,null); 
} 

Parent.prototype.getName = function(){ 
return this.name; 
}; 

Parent.prototype.setName = function(name) { 
this.name=name; 
}; 

Parent.prototype.getChildren = function(){ 
return this.children; 
}; 

Parent.prototype.setChildren = function(parent) { 
this.children=parent; 
}; 

var parent = create(aux,new Parent(""));// This method create tree parent 
var o = parent; 
j = JSON.stringify(o, (k, v) => Array.isArray(v) 
     && !(v = v.filter(e => e !== null && e !== void 0)).length ? void 0 : v, 2) 
    alert (j); 

Json-Datei:

{ 
    "name": "Ann", 
    "children": 
    [ 
    null, 
    { 
     "name": "Beta", 
     "children": 
     [ 
     null, 
     null, 
     null 
     ] 
    }, 
    null 
    ] 
} 

Was ich erwarte:

{ 
    "name": "Ann", 
    "children": 
    [ 
    { 
     "name": "Beta" 
    } 
    ] 
} 
+0

Weil ich Sie nicht denken wollen, Objekteigenschaften löschen. Es sieht so aus, als müssten Sie stattdessen null Elemente von Arrays "spleißen". – Andy

+0

Möchten Sie das ursprüngliche Objekt wirklich ändern? Ich würde in Betracht ziehen, ein neues gefiltertes Objekt zu erstellen, anstatt Eigenschaften aus der ursprünglichen Referenz –

+0

@MatiasCicero Relax zu aktualisieren und zu löschen. Es stammt aus einer JSON-Datei. Nach der Analyse ist es also bereits eine Kopie. – blex

Antwort

2

JSON.parse und JSON.stringify replacer Funktion übernehmen Sie die Werte ändern:

j = '{ "name": "Ann", "children": [ null, { "name": "Beta", "children": [ null, null, null ] }, null ] }' 
 

 
o = JSON.parse(j, (k, v) => Array.isArray(v) ? v.filter(e => e !== null) : v) 
 

 
console.log(o)

o = { "name": "Ann", "children": [ null, { "name": "Beta", "children": [ null, null, null ] }, null ] } 
 

 
j = JSON.stringify(o, (k, v) => Array.isArray(v) ? v.filter(e => e !== null) : v, 2) 
 

 
console.log(j)

Um die leeren Array entfernen zu:

o = { "name": "Ann", "children": [ null, { "name": "Beta", "children": [ null, null, null ] }, null ] } 
 

 
j = JSON.stringify(o, (k, v) => Array.isArray(v) 
 
           && !(v = v.filter(e => e)).length ? void 0 : v, 2) 
 

 
console.log(j)

+0

Ihre Lösung ist fantastisch Ich habe nur ein Problem, wie ich vor der JSON-Datei gesagt habe Ich bekomme es mit JSON.Stringify und mit dem Code, der auch das leere Array entfernt: Ich bekomme dieses "{\" Name \ ": \" Ann \ ", \" children \ ": [null, {\" name \ ": \" Beta \ ", \" children \ ": [null, null, null]}, null]}". Was mache ich falsch? – pete

+0

@pete vielleicht sind die Werte nicht 'null', aber' undefined' oder fehlen. Probiere das Update aus. – Slai

+0

Weitermachen ist dasselbe sehr seltsam. Mit dem Json gebrannt es funktioniert. Aber es mit JSON.stringify zu bekommen, funktioniert nicht. JavaScript will mich nur nerven. – pete

Verwandte Themen