2016-06-27 10 views
0

Ich möchte die einem bestehenden json ein neuer Wert in den folgenden Pfad hinzuzufügen: finden, wenn Pfad in json existiert NodeJS

VAL: "BS", PFAD: ["info", "bosses", "lives"]

wenn mein json die Pässe hatten es wird den Wert hinzufügen, sonst werde ich die Felder erstellen

Beispiel:

var myJson = { 
    "root": { 
        "name": "jim", 
        "age": "4", 
        "info": {"bosses": {"name": "sam"}} 
    } 
} 

so meine neue json li aussehen ke dies:

var myNewJson = { 
    "root": { 
        "name": "jim", 
        "age": "4", 
        "info": {"bosses": {"name": "sam", "lives": "BS"}} 
    } 
} 

ein Beispiel, wenn ich nicht die Felder hatte:

var myJson = { 
        "root": { 
            "name": "jim", 
            "age": "4", 
        } 
    } 

die Ausgabe:

var myNewJson = { 
        "root": { 
            "name": "jim", 
            "age": "4", 
            "info": {"bosses": {"lives": "BS"}} 
        } 
    } 

ein Beispiel, wo ein Teil der Pfad existiert Ich hatte keine Felder:

var myJson = { 
        "root": { 
            "name": "jim", 
            "age": "4", 
      "info": {"salary": 500} 
        } 
    } 

die Ausgabe:

var myNewJson = { 
        "root": { 
            "name": "jim", 
            "age": "4", 
            "info": {"salary": 500, "bosses": {"lives": "BS"}} 
        } 
    } 

Wie kann ich überprüfen, ob Pfad vorhanden ist (Anmerkung: Teil des Weges könnte EXIST wie kann ich wissen, von wo aus es zu starten)

+0

'' 'if (myJson.root ['info']) { /* code */ }' ' – webdeb

+0

Siehe http://stackoverflow.com/a/13719799/3284355, obwohl sie string wie' path = verwenden 'info.bosses.lives' 'Sie können es wie folgt verwenden:' assign (myJson, PATH, VAL); 'da die Pfadvariable auch array sein kann – Molda

+0

Das könnte gut sein, aber was ist, wenn Ihr Attribut/Feld 0 (Null) Wert hat? Wenn Sie path.to.your.node überprüfen, wird es falsch sein: –

Antwort

0

Die ersten was Sie denken, es könnte funktioniert könnte ein Code sein, wie:

if (myObject.attributeName){ 
    //property exists! 
} 

es für Sie in vielen Tests arbeiten, aber ich Sie sicher wissen, dass Sie Javascript einige Werte als truthy verwalten oder falsch. Es verwendet viele verschiedene Arten von Werten als Boolean-False in vielen Vergleichen (nur === nicht konvertieren Typ). Wenn Sie etwas wie

if(somethingtotest){ 
// it's true 
} 

überprüfen, ist es das gleiche würde man

if(somethingtotest == true){ 
// it's true 
} 

‚==‘ Operator tryes schreiben verschiedene Arten zu konvertieren „ähnlich“, zusammen zu sein. Im ersten Beispielcode können viele der Objektattributwerte '==' wahr sein. Dieser Attributwert ist truthy, was bedeutet, dass es ein Objekt ist, eine nicht leere Zeichenfolge, eine Zahl ungleich Null, die nicht NaN, true und nicht null oder undefined ist. Das bedeutet, wenn das Attribut eine leere Zeichenfolge ("") ist, wird diese Überprüfung fehlschlagen. Dasselbe gilt, wenn der Wert 0 (null), null, false ist. Scheitern bedeutet in diesem Fall nicht, dass die Eigenschaft nicht existiert. Tatsächlich existiert die Eigenschaft und enthält einen Wert, aber der Wert ist falsch und erfüllt diesen Test nicht.

Seit ECMAScript 5 das Basisobjekt hat die Funktion hasOwnProperty (Eigenschaftsname) So könnte man versuchen

if(myObject.hasOwnPorperty('attributeName')){ 
// do something 
} 

Diese Funktion erinnert uns, dass die Objekte auch Prototyp-Attribute, die unser Objekt erben könnte.Zum Beispiel, wenn ich schreibe

myObject.anyAttribute='AnyValue'; 
var my1stObject = Object.create(myObject); 
var my2ndObject = Object.create(myObject); 
myObject.anyAttribute='AnotherValue'; 
console.log(my1stObject.anyAttribute); 
console.log(my2ndObject.anyAttribute); 

letzten zwei Zeilen wird 'AnotherAttribute' drucken. In diesem Fall haben das erste und das zweite Objekt keine eigene Eigenschaft anyAttribute, aber sie verwenden das erste. anders, wenn Sie

myObject.anyAttribute='AnyValue'; 
var my1stObject = Object.create(myObject); 
var my2ndObject = Object.create(myObject); 
my1stObject.anyAttribute='AnotherValue'; 
console.log(my1stObject.anyAttribute); //AnotherValue 
console.log(my2ndObject.anyAttribute); //AnyValue 

Erstes Objekt hasOwnProperty 'anyAttribute' schreiben, weil wir es einstellen.

Endlich shure sein zu überprüfen, ob Sach proptotipe oder eigene, wirklich existiert, würden Sie

if('anyProperty' in myObject){ 
//do something 
} 

verwenden möchte ich vorschlagen, dass Sie es besser unter diesem Link zu lesen: https://www.nczonline.net/blog/2010/07/27/determining-if-an-object-property-exists/

Verwandte Themen