JSON.stringify 函数 (JavaScript)

  在bsrck项目中,使用jQuery.Form.js的ajaxSubmit时,遇到有文件上传的form提交,在firefox和chrome浏览器中测试,报Bad Request的错误,经查代码后发现是需要对form添加ENCTYPE="multipart/form-data"属性,在IE浏览器下正常,按正常使用规则是需要添加此属性。具体原因需要抓取字节流,确认技术细节;

  在寻找技术方案的时候,发现了此JSON.stringif方法,查些资料在此以做记录;

 

作用:  将JavaScript 值转换为 JavaScript 对象表示法 (Json) 字符串。

使用格式:JSON.stringify(value [, replacer] [, space])

参数:

value

必需。 要转换的 JavaScript 值(通常为对象或数组)。

replacer

可选。 转换结果的函数或数组。

replacer is a function, JSON.stringify calls the function, passing in the key and value of each member.‘ data-guid="dc82da6b06dbddbd82092ab1f2e96424">如果 replacer 为一个函数,则 JSON.stringify 会调用该函数,并传入每个成员的键和值。 使用返回值而不是原始值。 undefined, the member is excluded.‘ data-guid="3f6ed2faae8077328981aabbfd99c141">如果此函数返回 undefined,则排除成员。 根对象的键是一个空字符串:""。

replacer is an array, only members with key values in the array will be converted.‘ data-guid="b9f4f538b46fad2071af80be0070ff6d">如果 replacer 为一个数组,则仅转换该数组中具有键值的成员。 成员的转换顺序与键在数组中的顺序一样。 replacer array is ignored when the value argument is also an array.‘ data-guid="c4e42b49d6d7eb459295736dd5e1885f">当 value 参数也为数组时,将忽略 replacer 数组。

space

可选。 向返回值 JSON 文本添加缩进、空白和换行符以使其更易于读取。

space is omitted, the return-value text is generated without any extra white space. ‘ data-guid="48c9c3e436879d11ea32ccf4f5259ad9">如果省略 space,则将生成返回值文本,而没有任何额外空白。

space is a number, the return-value text is indented with the specified number of white spaces at each level.‘ data-guid="c57c9137e9716e824e8c1cd9efa7490d">如果 space 为一个数字,则返回值文本在每个级别缩进指定数目的空格。 space is greater than 10, text is indented 10 spaces.‘ data-guid="62860c6d5566f29380fa51408eff10ed">如果 space 大于 10,则文本缩进 10 个空格。

如果 space 是非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符数。

space is a string that is longer than 10 characters, the first 10 characters are used.‘ data-guid="2dcc16da441fd0521dee86520826e1d8">如果 space 是长度大于 10 个字符的字符串,则使用前 10 个字符。

返回值:

一个包含 JSON 文本的字符串。

备注:

value has a toJSON method, the JSON.stringify function uses the return value of that method.‘ data-guid="36e9d1ed3cab9485274e31ecf79530e7">如果 value 具有 toJSON 方法,则 JSON.stringify 函数使用该方法的返回值。 toJSON method is undefined, the member is not converted.‘ data-guid="7df2e474c28782ca00fa0bc4f8e8a8f4">如果 toJSON 方法的返回值为 undefined,则不转换成员。 这使对象能够确定其自己的 JSON 表示形式。

undefined, will not be converted.‘ data-guid="e63e958a21e37b823e0ee7747f0c6282">将不会转换不具有 JSON 表示形式的值,例如 undefined。 在对象中,将丢弃这些值。 在数组中,会将这些值替换为 null。

字符串值以引号开始和结束。 所有 Unicode 字符可括在引号中,除了必须使用反斜杠进行转义的字符。 以下字符的前面必须是反斜杠:

  • 引号 (")

  • 反斜杠 (\)

  • Backspace (b)

  • 换页 (f)

  • 换行符 (n)

  • 回车 (r)

  • 水平制表符 (t)

  • 四个十六进制数字 (uhhhh)

执行顺序

toJSON method exists for the value argument, JSON.stringify first calls the toJSON method.‘ data-guid="7f5dacc0cc5c7fede49822f7d710afc7">在序列化过程中,如果 value 参数具有 toJSON 方法,则 JSON.stringify 会首先调用 toJSON 方法。 如果该方法不存在,则使用原始值。 replacer argument is provided, the value (original value or toJSON return-value) is replaced with the return-value of the replacer argument.‘ data-guid="8cf5b4f667905fca26e310d23677eec9">紧接着,如果提供 replacer 参数,则该值(原始值或 toJSON 返回值)将替换为 replacer 参数的返回值。 space argument to generate the final JSON text.‘ data-guid="58fa4a5642c18dd7a1a7244d8b3e5dd2">最后,根据可选的 space 参数向该值添加空白以生成最终的 JSON 文本。

原文:http://msdn.microsoft.com/zh-cn/library/ie/cc836459(v=vs.94).aspx

另附参考资料:

http://www.cnblogs.com/damonlan/archive/2012/03/13/2394787.html

http://blog.sina.com.cn/s/blog_6ad6243801013egv.html

http://blog.csdn.net/five3/article/details/7181521

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。