Ist es möglich, bestimmte Felder von der Aufnahme in die JSON-Zeichenfolge auszuschließen?
Hier ist ein Pseudocode
var x = {
x:0,
y:0,
divID:"xyz",
privateProperty1: 'foo',
privateProperty2: 'bar'
}
Ich möchte privateProperty1 und privateproperty2 vom Erscheinen in der JSON-Zeichenfolge ausschließen
Also dachte ich, ich kann die Stringify-Ersetzungsfunktion verwenden
function replacer(key,value)
{
if (key=="privateProperty1") then retun "none";
else if (key=="privateProperty2") then retun "none";
else return value;
}
und in der stringify
var jsonString = json.stringify(x,replacer);
Aber im jsonString sehe ich es immer noch als
{...privateProperty1:value..., privateProperty2:value }
Ich möchte die Zeichenfolge ohne die darin enthaltenen privaten Eigenschaften.
javascript
json
Nilesh
quelle
quelle
Antworten:
Die Mozilla-Dokumente sagen, dass sie
undefined
(anstelle von"none"
) zurückkehren sollen:http://jsfiddle.net/userdude/rZ5Px/
Hier ist eine Duplizierungsmethode, falls Sie sich für diesen Weg entscheiden (gemäß Ihrem Kommentar).
http://jsfiddle.net/userdude/644sJ/
BEARBEITEN - Ich habe die Funktionstaste in der unteren Funktion geändert, um Verwirrung zu vermeiden.
quelle
Eine weitere gute Lösung: (erfordert Unterstrich)
Der Vorteil dieser Lösung besteht darin, dass jeder, der JSON.stringify unter x aufruft, korrekte Ergebnisse erzielt. Sie müssen die JSON.stringify-Aufrufe nicht einzeln ändern.
Nicht unterstrichene Version:
quelle
Sie können die native Funktion defineProperty aus Object verwenden:
quelle
enumerable
Wert dieses Eigenschaftsdeskriptors falsch ist.Einfachere Möglichkeit.
~~~
~~~
http://www.markandey.com/2015/07/how-to-hide-few-keys-from-being-being.html
quelle
Object.create ist eine andere Lösung, die der defineProperty-Lösung nahe kommt (Eigenschaften werden auf dieselbe Weise definiert), aber auf diese Weise definieren Sie die Eigenschaften, die von Anfang an verfügbar gemacht werden sollen. Auf diese Weise können Sie nur die gewünschten Eigenschaften
enumerable
verfügbar machen, indem Sie den Eigenschaftswert auf true setzen (standardmäßig false). JSON.stringify ignoriert nicht aufzählbare Eigenschaften. Der Nachteil ist, dass diese Eigenschaft auch bei Verwendung von for-in ausgeblendet wird Schleife auf dem Objekt oder Funktionen wie Object.keys.quelle
Hinweis für Miroslaw Dylag ‚s Antwort : Die definierte Eigenschaft sollte seine eigene Eigenschaft sein. Sonst würde es scheitern.
Funktioniert nicht:
Werke:
quelle
Ich weiß, dass dies bereits eine beantwortete Frage ist, aber ich möchte etwas hinzufügen, wenn ich instanziierte Objekte verwende.
Wenn Sie es mit einer Funktion zuweisen, wird es nicht in das Ergebnis von JSON.stringify () aufgenommen.
Um auf den Wert zuzugreifen, rufen Sie ihn ebenfalls als Funktion auf und enden mit
()
Sie können auch dann mit dem Konzept herumspielen, wenn es sich nicht um instanziierte Objekte handelt.
quelle
quelle
Sie können es einfach mit ES2017 tun
Hier haben
privateProperty1
undprivateProperty2
sind zu vergebenexc1
und sichexc2
entsprechend. Die verbleibenden werden einerfoo
neu erstellten Variablen zugewiesenquelle
Ich habe die JSON-Lösung verwendet, die auf einer kleinen Bibliothek basiert, die ich geschrieben habe, um das Schreiben zur Laufzeit zu erhalten. Https://stackoverflow.com/a/55917109/4236151
quelle
Hier ist ein anderer Ansatz, allerdings ohne Internet Explorer-Unterstützung.
quelle
Dies ist eine alte Frage, aber ich füge eine Antwort hinzu, da es einen viel einfacheren Weg gibt, damit umzugehen. Übergeben Sie ein Array von Zeichenfolgen, die Sie in JSON ausgeben möchten.
quelle