We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JSON是当前最流行的数据传输格式
JSON可以表示以下三种类型的值:简单值、对象、数组
早期JSON的解析器是使用eval函数完成的,使用这个方法可能存在恶意代码攻击,对于早期版本可以参考JOSN之父的这个shim:https://github.com/douglascrockford/JSON-js
undefined
Number
String
let demo = { show: function () {}, deep: undefined, name: 'js', author: 'yw', year: 2017 }; JSON.stringify(demo, ['name', 'author'], 3); // output: "{ "name": "js", "author": "yw" }" // 该函数其实会被调用6次,第一次调用时传入的参数为key: '', value: foo function replacer(key, value) { if (typeof value === "string") { return undefined; } return value; } var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7}; // 第二个参数为函数,针对每一个数值进行处理并返回 var jsonString = JSON.stringify(foo, replacer); // output:"{"week":45,"month":7}"
给要序列化的对象定义toJSON方法,从而扩展stringify功能实现更加复杂的自定义序列化功能
问题:为何给要序列化的对象定义toJSON方法,可以实现自定义序列化呢?
toJSON
分析:我们这里需要理解调用stringify实现序列化操作的内部顺序,假设现在我们作如下操作JSON.stringify(obj),那么实际要执行如下操作:
stringify
JSON.stringify(obj)
demo
var json = { name: 'js', author: 'yw', year: 2017, toJSON: function () { return 'toJSON'; } }; JSON.stringify(json, ['year', 'name']); // output: "toJSON"
json
var json = { name: 'js', author: 'yw', year: 2017 }; var json_str = JSON.stringify(json); JSON.parse(json_str, (key, value) => { if (key == 'name') { return undefined; } return value; });// Object {author: "yw", year: 2017}
很多人搞不清json与jsonp啥关系,以为jsonp是json的高级扩展,其实从作用来说,两者没有任何关系。json是一种轻量级的数据格式,而jsonp则是一种非标准的的解决跨域的数据传输协议!
jsonp
关于json.parse这里有一个补充
json.parse
The text was updated successfully, but these errors were encountered:
No branches or pull requests
JSON是当前最流行的数据传输格式
JSON对象
stringify
undefined
会直接忽略Number
|String
],为整数时代表缩进空格数,为字符串时代表缩进占位字符toJSON
问题:为何给要序列化的对象定义
toJSON
方法,可以实现自定义序列化呢?分析:我们这里需要理解调用
stringify
实现序列化操作的内部顺序,假设现在我们作如下操作JSON.stringify(obj)
,那么实际要执行如下操作:toJSON
方法,并且通过该方法可以取到有效值,那么调用该方法,否则按默认顺序执行序列化;demo
parse
json
数据解析为js数据格式json
数据undefined
则表示删除该项jsonp
很多人搞不清
json
与jsonp
啥关系,以为jsonp
是json
的高级扩展,其实从作用来说,两者没有任何关系。json
是一种轻量级的数据格式,而jsonp
则是一种非标准的的解决跨域的数据传输协议!补充
关于
json.parse
这里有一个补充The text was updated successfully, but these errors were encountered: