2016-11-08 2 views
-1

Ich möchte nur JSON-Werte nicht Keys/ausblenden. Für Ex: -Maskierung sensibler Informationen in Knoten

myObject = {"Name":"value1","Phoneno":"545454545445"} 
Output should be like below: 
myObject = {"key1":***** 

***,"key2":*****} 

Können Sie mir bitte sagen, wie wir dies in NodeJS tun kann? Danke.

Antwort

0

Wie wäre:

let myObject = { "Name": "value1", "Phoneno": "545454545445" }; 
let output = {}; 

function mask(value: string) { 
    let maskedValue = ""; 
    for (let i = 0; i < value.length; i++) { 
     maskedValue += "*"; 
    } 

    return maskedValue; 
} 

Object.keys(myObject).forEach(key => { 
    output[key] = mask(myObject[key]); 
}); 

console.log(output); // Object {Name: "******", Phoneno: "************"} 

(code in playground)

+0

Danke, es funktioniert. aber was ist, wenn JSON wie folgt ist: – tiya

+0

Wie unten? Unter was? Ich verstehe nicht –

0

Die folgende Strategie verwendet eine for...in Schleife um das Objekt zu durchqueren, um alle Eigenschaftswerte mit einer Kette von Sternchen ersetzt.

const myObject = {"Name": "value1", "Phoneno": "545454545445"}; 
 

 
const mask = obj => { 
 
    const masked = {}; 
 
    for (let key in obj) masked[key] = "*****"; 
 
    return masked; 
 
}; 
 

 
console.log("original:", myObject); 
 
console.log("masked:", mask(myObject));

Wenn Sie die maskierten Werte wollen Sternchen, aber die gleiche Länge wie das Original (anstelle einer konstanten Länge), ändern Sie die for...in Schleife auf die folgenden sein: for (let key in obj) masked[key] = "*".repeat(obj[key].length);.

UPDATE: Maskieren verschachtelte Objekte (und sogar Arrays)

In Ihre Kommentare, fragte man über Werte in verschachtelten Objekten zu maskieren.

Um ein verschachteltes Objekt oder sogar eine Kombination von Objekten und/oder Arrays in einer verschachtelten Anordnung zu verarbeiten, benötigen Sie wahrscheinlich eine Rekursion. Kurz gesagt, wenn der aktuelle Wert ein primitiver Wert ist (zB eine Zeichenkette, eine Zahl, ein Boolescher Wert usw.), dann ersetze ihn durch die Dummy-Zeichenkette, aber wenn der aktuelle Wert ein Objekt selbst (oder ein Array) ist, dann re -Senden Sie diesen Wert von Anfang an in den Maskierungsprozess zurück.

Das folgende Beispiel zeigt eine mögliche Vorgehensweise. Ich habe jQuery verwendet, um festzustellen, ob ein Wert ein einfaches Objekt oder ein Array ist. In diesem Beispiel enden Objekteigenschaftsnamen mit "A", "B", "C" usw. Arrays werden in Objekte umgewandelt, z. ["foo", "bar"] würde in {"0": "*****", "1": "*****"} konvertiert werden.

const myObject = {propA: "a", propB: {propBA: "ba", propBB: "bb"}, propC: ["c0", "c1"], propD: {propDA: "da", propDB: {propDBA: "dba", propDBB: "dbb"}, propDC: ["dc0", "dc1"]}, propE: ["e0", {propE1A: "e1a", propE1B: "e1b"}, ["e20", "e21"]]}; 
 

 
const mask = objOrArr => { 
 
    const masked = {}; 
 
    for (let key in objOrArr) { 
 
    const val = objOrArr[key]; 
 
    if ($.isPlainObject(val) || $.isArray(val)) { 
 
     masked[key] = mask(val); 
 
    } else { 
 
     masked[key] = "*****"; 
 
    } 
 
    } 
 
    return masked; 
 
}; 
 

 
console.log("original... ", myObject); 
 
console.log("masked... ", mask(myObject));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Ich bin mir nicht sicher, ob es eine gute Idee ist, einen Platzhalter zu verwenden, der genau die Wertlänge des Objekts hat. Mit einem statischen Platzhalter wäre meiner Meinung nach besser. Da es maskiert ist, spielt es keine Rolle, wie lange der Wert auf jeden Fall ist. – Vernon

+1

@Vernon, Fair genug. Ändern Sie den Code in 'for (let key in obj) maskiert [key] =" ***** ";'. Macht es noch einfacher. ... Ihren Vorschlag in meine Antwort aufgenommen. –

+0

Vielen Dank an alle, aber was ist, wenn Obect wie unten ist: Lassen Sie myObject = { Rubrik: { ID: "1234", Name: "XYZ", Benutzername: "abc", domain: "R", Quelle : "abc", MessageVersion: "1.0" , SendDateTime: date}, Kunde: { Veranstaltung: "1234" } }; – tiya

1

Vielleicht würden Sie die Bibliothek https://github.com/tcdl/json-masker nützlich finden, die Sie dies tun können:

const mask = require('json-masker'); 
const myObject = {"Name": "value1", "Phoneno": "545454545445"}; 
const masked = mask(myObject); // will produce: 
           // {"Name": "xxxxx*", "Phoneno": "************"} 
Verwandte Themen