你可能不知道json.stringify()详细解释
JSON已经逐渐取代XML是由世界各地的开发商广泛使用。本文是对部分json.stringify在Javascript中使用的细节进行深入的解释。首先,JSON,Javascript的简要回顾:
并非所有合法JSON都是有效的Javascript;
JSON仅是文本格式;
JSON中的数字是十进制的。
1。json.stringify
设:a = 2,b:(函数)};
JSON.stringify(食品);
:2 }
的json.stringify函数将Javascript对象为文本JSON。不能忽视文本的文本属性,属性B在foo的值是一个函数的定义和不丢失的转换。
还有什么其他属性不能转换
1。循环引用
如果一个对象的属性值以间接的方式引用对象本身,那么它就是一个循环引用:
var bar = {
{:
C:Foo
}
};
var { { { {
B:酒吧
};
属性C指向它自己,如果它被逐层解析,它将进入一个无限循环:
让foostringified = json.stringify(Foo);
console.log(foostringified); / / {B:{ :{ } } }
C的属性指向富对象,而富对象中的B属性指向bar对象,不能处理,整个函数被忽略,返回到空对象。
下列定义(原文中的示例)无法编译:
设;
错误消息:
referenceerror:Foo没有定义
在REPL:1:14
功能语言Haskell,类似的定义方法可以因为懒惰的评价技术。
2。符号和定义
设为:未定义};
JSON.stringify(食品);
{
符号
符号();
JSON.stringify(食品);
{
例外
在一个数组中的元素,stringify无法填充空。
让= {符号(Foo),定义,功能('works ' }){ },
JSON.stringify(食品);
{零,零,零/ 'works}
这可以保持数组本身的形状,即每个元素的原始索引。
为什么有些属性无法stringify
因为JSON是一个通用的文本格式,它是不相关的语言。假如函数的定义也stringify,如何决定哪些语言是如何把它呈现在一个适当的方式将变得更加复杂,特别是相关的一些语言特征,如符号在Javascript。
ECMAscript的官员也强调了这一:
它并不试图把ECMAscript的内部数据表示,表示,世界的第二部分。
2。重写对象tojson功能
一种绕过一些对象的属性是不stringify是实现对象的tojson方法来自定义stringify对象。因为几乎每个Ajax调用将使用json.stringify,掌握这一技术将服务器交互的处理有很大的帮助。
和toString允许你返回字符串的形式对象(字符串)。类似tojson,tojson提供了一种方法来变换对象,不能stringify属性,以便下一json.stringify可以转化为JSON格式。
函数人(第一个,最后一个){
this.firstname =第一;
最后this.last =;
}
(person.prototype.process =功能){
返回this.firstname + +
this.lastname;
};
让艾德=新的人('ade,'p');
JSON.stringify(ADE);
{ / / 名:与
人的实例的过程中的作用是不stringify ADE。如果服务器只希望ADE的全名,而不是让名字和名字,我们可以直接定义tojson实现目标:
(person.prototype.tojson =功能){
{姓名:this.process返回();};
};
让艾德=新的人('ade,'p');
JSON.stringify(ADE);
{ / / 姓名:阿德P}
定义tojson的优点是可重用性和稳定性。你可以使用ADE匹配任何图书馆,和数据传输将姓名的tojson定义返回。
jQuery
美元。后('endpoint,ADE);
2 /角
This.httpService.post('endpoint,ADE)
三.可选参数
json.stringify的完整定义如下:
json.stringify(价值、替代品、空间)
无论是替代品和空间是可选参数,然后我们会解释它们分开。
替代品
替代品是一个过滤函数或数组包含要stringify属性的名称。如果没有定义,所有的默认属性是stringify。
1。阵列
只有在数组的属性stringify:
允许{ { { {
甲:1,
b:字符串
C:假
};
JSON.stringify(Foo,{ 'a','b' });
:1、B
嵌套属性也被过滤:
让bar = {
甲:1,
B:{ 2 }
};
JSON.stringify(酒吧,{ 'a','b' });
:1、B:
JSON.stringify(酒吧,{ A,B,C});
:1、B::2 }
定义筛选器数组有时不符合要求时,可以自定义筛选器函数。
2。功能
筛选器函数将对象中的每个属性和值作为输入,返回值有以下几种情况:
返回未定义以指示属性被忽略;
返回一个布尔值,或将stringify;
返回对象将触发递归调用来了解基本类型的属性。
返回值,不能stringify将被忽略;
让巴兹= { {
甲:1,
B:{ 2 }
};
返回一个大于1的值
让替代品=功能(键,值){
如果(typeof =数){
返回值> 1值:未定义;
}
返回值;
};
JSON.stringify(Baz,替代品);
::2 }
通过重写上面的函数来添加适当的输出,您可以看到具体的执行步骤:
让obj = { {
甲:1,
B:{ 2 }
};
让跟踪=函数(键,值){
Console.log ('Key: ', key);
console.log(价值:',值);
返回值;
};
JSON.stringify(obj,示踪);
键:
对象值:{:1,b:对象}
密钥:
1 /值:
密钥:
对象{ 2:
密钥:
2 /值:
空间
你知道默认json.stringify只返回一行,也没有在所有的空间如果你想打印得更漂亮,你需要使用空格参数。
我将告诉你一个非常简单的方法,通过制表符来分隔它。
让空间= {
甲:1,
B:{ 2 }
};
使用选项卡
JSON.stringify(空间的定义,);
a:1,
:2
}
JSON.stringify(空间、不确定的,);
{ 1:
自定义分隔符
JSON.stringify(空间,定义,'a');
1,
B:{ / /
2
三颗星问题:打印结果倒数第三行为什么有21个
结论
本文介绍了一些常用的技术tojson:
几种类型的stringify无法
使用tojson定义json.stringify性能
两种定义可选参数,过滤性能
可选参数空间用于格式化输出结果。
不同的数组和对象之间如果它包含一个元素,不能stringify
总结
以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一定的帮助。如果有任何疑问,您可以留言交流,谢谢您的支持。
原文:你不知道stringify JSON。
翻译:fundebug
为了保证可读性,本文采用意译,而不是直译,此外,本著作的版权归原作者所有,翻译仅用于学习。