Serialisieren Sie JavaScript mit einem Superet von JSON, das regelmäßige Ausdrücke, Daten und Funktionen enthält.
Der Code in diesem Paket begann sein Leben als internes Modul zum Ausdruck. Um seine Nützlichkeit zu erweitern, lebt es heute als serialize-javascript -ein unabhängiges Paket auf NPM.
Sie fragen sich wahrscheinlich: Was ist mit JSON.stringify() !? Wir haben festgestellt, dass wir manchmal JavaScript -Funktionen , Regexps , Daten , Sets oder Karten serialisieren müssen. Ein gutes Beispiel ist eine Web-App, die das clientseitige URL-Routing verwendet, bei dem die Routendefinitionen Regexps sind, die vom Server an den Client gemeinsam genutzt werden müssen. Dieses Modul eignet sich auch hervorragend für die Kommunikation zwischen Knotenprozessen.
Die von der einzelnen Exportfunktion dieses Pakets zurückgegebene Zeichenfolge ist ein wörtliches JavaScript, das in einer .js -Datei gespeichert oder in ein HTML -Dokument eingebettet werden kann, indem der Inhalt eines <script> -Elements erstellt wird.
HTML -Zeichen und JavaScript -Zeilen -Terminatoren werden automatisch entkommen.
Bitte beachten Sie, dass die Serialisierung für ES6 -Sets und -Maps unterstützt werden. Array.from (nicht im IE oder im Knoten <0,12 verfügbar) oder ein Array.from Polyfill.
Installieren Sie mit NPM:
$ npm install serialize-javascript var serialize = require ( 'serialize-javascript' ) ;
serialize ( {
str : 'string' ,
num : 0 ,
obj : { foo : 'foo' } ,
arr : [ 1 , 2 , 3 ] ,
bool : true ,
nil : null ,
undef : undefined ,
inf : Infinity ,
date : new Date ( "Thu, 28 Apr 2016 22:02:17 GMT" ) ,
map : new Map ( [ [ 'hello' , 'world' ] ] ) ,
set : new Set ( [ 123 , 456 ] ) ,
fn : function echo ( arg ) { return arg ; } ,
re : / ([^s]+) / g ,
big : BigInt ( 10 ) ,
url : new URL ( 'https://example.com/' ) ,
} ) ;Das obige erzeugt die folgende Zeichenfolge aus:
'{"str":"string","num":0,"obj":{"foo":"foo"},"arr":[1,2,3],"bool":true,"nil":null,"undef":undefined,"inf":Infinity,"date":new Date("2016-04-28T22:02:17.000Z"),"map":new Map([["hello","world"]]),"set":new Set([123,456]),"fn":function echo(arg) { return arg; },"re":new RegExp("([^\\s]+)", "g"),"big":BigInt("10"),"url":new URL("https://example.com/")}' HINWEIS: Um eine verschönere Zeichenfolge zu erstellen, können Sie ein optionales zweites Argument an serialize() übergeben, um die Anzahl der für die Einklebung zu verwendenden Räume zu definieren.
Ein primäres Merkmal dieses Pakets besteht darin, Code in eine Zeichenfolge von wörtlichen JavaScript zu serialisieren, die in ein HTML -Dokument eingebettet werden kann, indem es als Inhalt des <script> -Elements hinzugefügt wird. Um diesen sicher zu machen, entkommen HTML -Zeichen und JavaScript -Zeilenterminer automatisch.
serialize ( {
haxorXSS : '</script>'
} ) ;Das obige erzeugt die folgende Zeichenfolge, HTML-es, die in ein HTML-Dokument sicher zu stecken, da das Inline-Skriptelement nicht beendet wird:
'{"haxorXSS":"\u003C\u002Fscript\u003E"}'Sie können ein optionales
unsafeArgument anserialize()für die gerade Serialisierung übergeben.
Die serialize() -Funktion akzeptiert ein options als zweites Argument. Alle Optionen werden zu undefined standardmäßig:
options.space Diese Option entspricht dem space -Argument, das an JSON.stringify übergeben werden kann. Es kann verwendet werden, um der serialisierten Ausgabe Whitespace und Einrückung hinzuzufügen, um sie lesbarer zu machen.
serialize ( obj , { space : 2 } ) ; options.isJSON Diese Option ist ein Signal für serialize() , dass das serialisierte Objekt keine Funktions- oder Regexps -Werte enthält. Dies ermöglicht einen Hot-Pad, mit dem die Serialisierung schneller über 3-fach sein kann. Wenn Sie viele Daten serialisieren und seinen reinen JSON kennen, können Sie diese Option für eine Beschleunigung aktivieren.
HINWEIS: Bei der Verwendung dieser Option wird die Ausgabe weiterhin entkommen, um vor XSS zu schützen.
serialize ( obj , { isJSON : true } ) ; options.unsafe Diese Option besteht darin, zu serialize() , dass wir ohne den XSS -Schutz eine gerade Umwandlung durchführen möchten. Diese Optionen müssen explizit auf true eingestellt werden. HTML -Zeichen und JavaScript -Zeilenteratoren werden nicht entkommen. Sie müssen Ihre eigenen rollen.
serialize ( obj , { unsafe : true } ) ; options.ignoreFunction Diese Option soll serialize() signalisieren, dass wir die JavaScript -Funktion nicht serialisieren möchten. Behandeln Sie die Funktion einfach wie JSON.stringify DO, aber andere Funktionen funktionieren wie erwartet.
serialize ( obj , { ignoreFunction : true } ) ; Für einige Anwendungsfälle müssen Sie möglicherweise auch die Zeichenfolge deserialisieren. Dies ist explizit nicht Teil dieses Moduls. Sie können es jedoch leicht selbst schreiben:
function deserialize ( serializedJavascript ) {
return eval ( '(' + serializedJavascript + ')' ) ;
} HINWEIS: Vergessen Sie nicht die Klammern um das serialisierte JavaScript, da die { als der Beginn eines Körpers angesehen wird.
Diese Software kann unter dem Yahoo! Inc. BSD -Lizenz. In der Lizenzdatei für Lizenztext und Copyright -Informationen finden Sie.