关键词:
按照 JSON 的规范,使用 JSON.stringify() 做对象序列化时,如果一个属性为函数,那这个属性就会被忽略。
const data1 = {
a: ‘aaa‘,
fn: function() {
return true
}
}
JSON.stringify(data)
// 结果是 "{"a":"aaa"}"
还有一种情况,一个属性的值为 undefined
const data2 = {
a: ‘abc‘,
b: undefined
}
JSON.stringify(data2)
// 结果是 "{"a":"abc"}"
如果属性为 null
则可以正常序列化这个属性:
const data3 = {
a: ‘abc‘,
b: null
}
JSON.stringify(data3)
// 结果是 "{"a":"abc","b":null}"
因为 null
可表示已经赋值,而 undefined
表示未定义、未赋值,所以执行 JSON.stringify
不会处理。
stringify
函数
stringify
函数的定义为 JSON.stringify(value [, replacer [, space]])
后面还带有我不常用两个可选参数 replacer 和 space
value
参数不多解释,replacer
其实就是一个自定义函数,可以改变 JSON.stringify
的行为,space
就是格式化输出,最大值为 10,非整数时取值为 1
stringify
输出 Function
本质上无论怎么改,stringify
还是不会输出 Function
,但是 Function
可以调用 toString()
方法的,所以思路就很明了了。
const data1 = {
a: ‘aaa‘,
fn: function() {
return true
}
}
const replace = function(k ,v) {
if(typeof v === ‘function‘) {
return Function.prototype.toString.call(v)
}
return v
}
JSON.stringify(data1, replace)
// 结果 "{"a":"aaa","fn":"function () {
return true
}"}"
同理可证 undefined
也能输出了
const replace = function(k ,v) {
if(v === undefined){
return ‘undefined‘
}
return v
}
stringify
格式化输出
JSON.stringify
的第三个参数很简单,相当于我们编辑器的 tab_size
const data4 = {
a: ‘abc‘,
b: null,
c: {
x: ‘xxx‘,
y: ‘yyy‘,
z: 2046
},
d: 9527
}
JSON.stringify(data4, null, 2);
// 输出结果
/*
"{
"a": "abc",
"b": null,
"c": {
"x": "xxx",
"y": "yyy",
"z": 2046
},
"d": 9527
}"
*/
toJSON
方法
toJSON
是个覆盖函数,尽量少用,看了代码就懂了:
const data5 = {
a: ‘abc‘,
b: null,
c: {
x: ‘xxx‘,
y: ‘yyy‘,
z: 2046
},
d: 9527,
toJSON: function() {
return ‘WTF‘
}
}
JSON.stringify(data5, null, 2);
// 结果返回 "WTF"
限制 JSON 字符串化深度
...h【发布时间】:2013-05-0404:35:30【问题描述】:当使用JSON.stringify(或类似的东西)对对象进行字符串化时,有一种方法可以限制字符串化深度,即只进入对象树的n层并忽略之后的所有内容(或者更好:在其中放置占位符,表示... 查看详情
JSON.stringify 深层对象
】JSON.stringify深层对象【英文标题】:JSON.stringifydeepobjects【发布时间】:2012-12-0110:13:23【问题描述】:我需要一个从任何参数构建JSON有效字符串的函数,但是:通过不添加两次对象来避免递归问题通过截断超过给定深度来避免... 查看详情
json对象实现深度克隆
...obj.constructor===Object?:[]; if(typeofJSON==='object') vars=JSON.stringify(obj),//系列化对象 newobj=JSON.parse(s);//反系列化(还原) else if(newobj.constructor===Array) newobj.concat(obj); else for(variinobj) newobj[i]=obj[i]; returnnewobj;;这是js深度克隆... 查看详情
在 JSON.stringify 中使用变量
】在JSON.stringify中使用变量【英文标题】:useavariableinJSON.stringify【发布时间】:2014-03-0915:22:13【问题描述】:我在我的节点restful服务器中使用stringify来提供数据:answer=JSON.stringify(activities:result,null,\'\\t\');returnanswer其中result是一... 查看详情
json.stringify(),json.parse(),tojson()方法使用
JSON.stringify():将value(Object,Array,String,Number...)序列化为JSON字符串JSON.parse():将JSON数据解析为js原生值toJSON(),作为JSON.stringify中第二个参数(函数过滤器)补充,理解内部顺序很重要。假设把一个对象传入JSON.stringify()序列化对象的顺序如... 查看详情
使用 JSON.stringify 时不需要的数组索引
】使用JSON.stringify时不需要的数组索引【英文标题】:UnwantedarrayindexeswhenusingJSON.stringify【发布时间】:2012-02-1109:04:27【问题描述】:我使用JSON.stringify方法将数组传递给服务器。我有一个包含4个元素的数组:arr[10]=1;arr[20]=1;arr[30]... 查看详情
关于vue中json.parse(json.stringify(...))使用深拷贝问题
一般我们单独用JSON.parse()或JSON.stringify()今天在学vue看到JSON.parse(JSON.stringify(...))的用法,这里研究一下;首先分别说下他们的用法: JSON.parse() 是将字符串中的对象解析出来例: varstr="{‘name‘:‘huahua‘,‘age‘:‘22‘}... 查看详情
如何正确使用 JSON.stringify 和 json_decode()
】如何正确使用JSON.stringify和json_decode()【英文标题】:howtouseJSON.stringifyandjson_decode()properly【发布时间】:2013-04-0520:36:46【问题描述】:我试图通过以下方式将多维Javascript数组传递到我网站上的另一个页面:在数组上使用JSON.strin... 查看详情
json.parse()和json.stringify()使用
...在{}外,每个属性名都必须用双引号,否则会抛出异常。stringify()用于从一个对象解析出字符 查看详情
Node.js - 使用 json.stringify 时,正文搞砸了
】Node.js-使用json.stringify时,正文搞砸了【英文标题】:Node.js-Bodyismessedupwhenusingjson.stringify【发布时间】:2014-07-3116:19:49【问题描述】:客户:$.ajax(url:some_url,type:\'post\',dataType:\'json\',data:JSON.stringify(myArray:[])...$.ajax(url:some 查看详情
使用 JSON.stringify(queryObject) 时来自 mongoose js 的意外行为
】使用JSON.stringify(queryObject)时来自mongoosejs的意外行为【英文标题】:UnexpectedbehaviorfrommongoosejswhenusingJSON.stringify(queryObject)【发布时间】:2021-08-2821:30:08【问题描述】:当我执行JSON.stringify(theKey:\'some\\thing\'时,结果将是:"theKey":"s... 查看详情
qs.stringify、qs.parse、json.stringify的使用和区别
...安装,是一个npm仓库所管理的包。importqsfrom'qs'而qs.stringify()将对象序列化成URL的形式,以&进行拼接。如图qs.parse()将URL解析成对象的形式JSON是正常类型的JSON JSON.stringify同qs.stringify()对比,功能虽然是都是序列化,但是... 查看详情
在 Angular2 模板的表达式中使用 JSON.stringify
】在Angular2模板的表达式中使用JSON.stringify【英文标题】:UsingJSON.stringifyinanexpressioninAngular2template【发布时间】:2016-12-0200:36:45【问题描述】:我有一个小表达式来检查两个对象是否不同,以便显示这个元素(通过添加类名):&l... 查看详情
使用 JSON.stringify 将冒号转换为 unicode
】使用JSON.stringify将冒号转换为unicode【英文标题】:JSON.stringifyconvertscoloninsidestringtoaunicodecharacter[closed]【发布时间】:2021-09-1319:23:50【问题描述】:我在javascript中有一个对象,像这样time:"YYYY-MM-DDT00:00:00.000Z@YYYY-MM-DDT23:59:59.999Z"当... 查看详情
使用 JSON.stringify 将对象转换为字符串显示空对象 [重复]
】使用JSON.stringify将对象转换为字符串显示空对象[重复]【英文标题】:convertobjecttostringusingJSON.stringifyshowemptyobject[duplicate]【发布时间】:2018-12-0918:49:00【问题描述】:我正在尝试使用JSON.stringify将对象转换为字符串,但我得到了... 查看详情
格式化输出json
参考技术AJSON.stringify()是将JavaScript对象转换为JSON的规范方法。有许多JavaScript框架在内部都使用了JSON.stringify(),比如Express框架的res.json()和Axiosbody序列化。但是,默认情况下,JSON.stringify()输出的JSON格式,不带空格或颜色。在后... 查看详情
data-* 属性中的 encodeURIComponent() 与 JSON.stringify()
】data-*属性中的encodeURIComponent()与JSON.stringify()【英文标题】:encodeURIComponent()vsJSON.stringify()indata-*attribute【发布时间】:2014-10-1004:39:07【问题描述】:我想使用数组作为data-*属性,并且很多***答案建议我应该使用JSON.stringify();Howt... 查看详情
相当于 JSON.stringify 的 jquery [重复]
】相当于JSON.stringify的jquery[重复]【英文标题】:jqueryequivalentforJSON.stringify[duplicate]【发布时间】:2012-06-2213:17:18【问题描述】:可能重复:SerializingtoJSONinjQuery我在我的javascript代码中使用jquery作为库。但有时我必须JSON.stringify()。... 查看详情