15个JSON.stringify()参考示例
作者:admin 时间:2022-3-30 18:21:10 浏览:JSON.stringify()
方法将一个 JavaScript 对象或值转换为 JSON 字符串。在转换过程中,可能你会遇到一些意外问题,比如某些值在转换前后发生了变化,为此,你需要特别注意,务必查看转换后的字符串是否与自己的期望一致。
本文将提供15个JSON.stringify()
示例,介绍JSON.stringify()
的用法及注意问题。
在文章开始之前,你还可以参考下文,了解更多有关JSON.stringify()
的知识。
使用 JSON.stringify() 方法
JSON.stringify({}); // '{}'
JSON.stringify(true); // 'true'
JSON.stringify("foo"); // '"foo"'
JSON.stringify([1, "false", false]); // '[1,"false",false]'
JSON.stringify({ x: 5 }); // '{"x":5}'
JSON.stringify({x: 5, y: 6});
// "{"x":5,"y":6}"
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
// '[1,"false",false]'
JSON.stringify({x: undefined, y: Object, z: Symbol("")});
// '{}'
JSON.stringify([undefined, Object, Symbol("")]);
// '[null,null,null]'
JSON.stringify({[Symbol("foo")]: "foo"});
// '{}'
JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
// '{}'
JSON.stringify(
{[Symbol.for("foo")]: "foo"},
function (k, v) {
if (typeof k === "symbol"){
return "a symbol";
}
}
);
// undefined
// 不可枚举的属性默认会被忽略:
JSON.stringify(
Object.create(
null,
{
x: { value: 'x', enumerable: false },
y: { value: 'y', enumerable: true }
}
)
);
// "{"y":"y"}"
解释
JSON.stringify()
将值转换为相应的JSON格式,下面是转换时要注意的问题:
1、转换值如果有 toJSON()
方法,该方法定义什么值将被序列化。
2、非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。
3、布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
4、undefined
、任意的函数以及 symbol
值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时)。函数、undefined
被单独转换时,会返回 undefined
,如JSON.stringify(function(){})
或 JSON.stringify(undefined)
。
5、对包含循环引用的对象(对象之间相互引用,形成无限循环)执行此方法,会抛出错误。
6、所有以 symbol
为属性键的属性都会被完全忽略掉。
7、Date
日期调用了 toJSON()
将其转换为了 string
字符串(同Date.toISOString()
),因此会被当做字符串处理。
8、NaN 和 Infinity 格式的数值及 null 都会被当做 null。
9、其他类型的对象,包括 Map/Set/WeakMap/WeakSet,仅会序列化可枚举的属性。
toJSON 方法
如果一个被序列化的对象拥有 toJSON
方法,那么该 toJSON
方法就会覆盖该对象默认的序列化行为:不是该对象被序列化,而是调用 toJSON
方法后的返回值会被序列化,例如:
var obj = {
foo: 'foo',
toJSON: function () {
return 'bar';
}
};
JSON.stringify(obj); // '"bar"'
JSON.stringify({x: obj}); // '{"x":"bar"}'
JSON.stringify用作 JavaScript
注意 JSON 不是 JavaScript 严格意义上的子集,在 JSON 中不需要省略两条终线(Line separator 和 Paragraph separator),但在 JavaScript 中需要被省略。因此,如果 JSON 被用作 JSONP 时,下面方法可以使用:
function jsFriendlyJSONStringify (s) {
return JSON.stringify(s).
replace(/\u2028/g, '\\u2028').
replace(/\u2029/g, '\\u2029');
}
var s = {
a: String.fromCharCode(0x2028),
b: String.fromCharCode(0x2029)
};
try {
eval('(' + JSON.stringify(s) + ')');
} catch (e) {
console.log(e); // "SyntaxError: unterminated string literal"
}
// No need for a catch
eval('(' + jsFriendlyJSONStringify(s) + ')');
// console.log in Firefox unescapes the Unicode if
// logged to console, so we use alert
alert(jsFriendlyJSONStringify(s)); // {"a":"\u2028","b":"\u2029"}
总结
本文通过15个示例,介绍了JSON.stringify()的用法,以及转换时要注意的问题,希望对大家有所帮助。
您可能对以下文章也感兴趣
标签: JSON JSON.stringify
- 站长推荐