將JavaScript序列化為JSON的超集,其中包括正則表達式,日期和函數。
此軟件包中的代碼開始了其作為表達狀態的內部模塊的生命。為了擴大其有用性,它現在以serialize-javascript形式生存,這是NPM上的獨立軟件包。
您可能想知道: JSON.stringify() !我們發現有時我們需要序列化JavaScript功能, Regexps ,日期,集合或地圖。一個很好的示例是一個Web應用程序,它使用客戶端URL路由,路由定義是Regexps,需要從服務器共享到客戶端。但是,該模塊也非常適合在節點過程之間進行通信。
從該軟件包的單個導出函數返回的字符串是字面的JavaScript,可以保存到.js文件,或者通過製作<script>元素的內容將其嵌入到HTML文檔中。
HTML字符和JavaScript線終結器將自動逃脫。
請注意,ES6集合和地圖的序列化需要支持Array.from (IE或Node <0.12中的不可用)或Array.from 。
使用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/' ) ,
} ) ;以上將產生以下字符串輸出:
'{"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/")}'注意:要產生一個美化的字符串,您可以將可選的第二個參數傳遞到serialize()以定義用於凹痕的空間數量。
此軟件包的主要功能是將代碼序列化為一串文字JavaScript,可以將其嵌入HTML文檔中,以通過將其添加為<script>元素的內容。為了使此安全,HTML字符和JavaScript線終結器將自動逃脫。
serialize ( {
haxorXSS : '</script>'
} ) ;以上將產生以下字符串,HTML排出的輸出可以安全地放入HTML文檔中,因為它不會導致內聯腳本元素終止:
'{"haxorXSS":"\u003C\u002Fscript\u003E"}'您可以將可選的
unsafe參數傳遞給serialize()以進行直序化。
serialize()函數接受options對像作為其第二個參數。所有選項都被默認為undefined :
options.space此選項與可以傳遞給JSON.stringify space參數相同。它可用於將空格和凹痕添加到序列化輸出中,以使其更可讀。
serialize ( obj , { space : 2 } ) ; options.isJSON此選項是serialize()的信號,即要序列化的對像不包含任何函數或regexps值。這使得允許序列化更快超過3倍的熱路徑。如果您序列化大量數據,並且知道其純JSON,則可以啟用此選項以加快加速。
注意:使用此選項時,仍將逃脫輸出以防止XS。
serialize ( obj , { isJSON : true } ) ; options.unsafe此選項是發出serialize()信號,我們希望在沒有XSS保護的情況下進行直接轉換。此選項需要明確設置為true 。 HTML字符和JavaScript線終結者將不會被逃脫。您將必須自己滾動。
serialize ( obj , { unsafe : true } ) ; options.ignoreFunction此選項是向我們不需要序列化JavaScript函數發出信號serialize() 。只需像JSON.stringify一樣對待功能,但是其他功能將按預期工作。
serialize ( obj , { ignoreFunction : true } ) ; 對於某些用例,您可能還需要對字符串進行估算。這明確不是此模塊的一部分。但是,您可以輕鬆地自己寫:
function deserialize ( serializedJavascript ) {
return eval ( '(' + serializedJavascript + ')' ) ;
}注意:不要忘記串行的JavaScript周圍的括號,因為開口支架{將被認為是身體的開始。
該軟件可以在Yahoo!下免費使用。 Inc. BSD許可證。有關許可文本和版權信息,請參見許可證文件。