将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许可证。有关许可文本和版权信息,请参见许可证文件。