深度使用json.stringify()

暖夏暖了谁      2022-02-12     421

关键词:

按照 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()。... 查看详情