在JavaScript中,我如何将对象序列化为JSON?
您正在寻找JSON.stringify
。
示例:
const object = {
hello: "world",
"some array": [ 42, 69, 420, 1337, null, true ]
},
primitive = false;
console.log(JSON.stringify(object)); // "{\"hello\":\"world\",\"some array\":[42,69,420,1337,null,true]}"
console.log(JSON.stringify(primitive)); // "false"
下载 https://github.com/douglascrockford/JSON-js/blob/master/json2.js
,并将其包含在代码中,然后执行以下操作:
var json_data = JSON.stringify(obj);
json2.js
了,除非你的目标是非常旧的浏览器:现代浏览器已经包含了JSON
对象的本地实现。json2.js
的好处在于只有在找不到本地对象时才会使用它。关于浏览器支持的详细说明,请参见[https://dev59.com/ynNA5IYBdhLWcg3wn_Q1]。 - Edurne Pascual为了保持向后兼容性,如果没有本地JSON支持(为了简单起见使用jQuery),我会从cloudflare CDN加载Crockford的JSON库:
function winHasJSON(){
json_data = JSON.stringify(obj);
// ... (do stuff with json_data)
}
if(Object.prototype.hasOwnProperty.call(window, "JSON") && typeof JSON.stringify === 'function'){
winHasJSON();
} else {
$.getScript('//cdnjs.cloudflare.com/ajax/libs/json2/20121008/json2.min.js', winHasJSON)
}
typeof JSON === "object"
不是一个安全的检查方式。如果 JSON === null
,那么 if(typeof JSON === 'object' && typeof JSON.stringify === 'function')
将会失败。你需要进行存在性检查。正确的方式是 if(Object.prototype.hasOwnProperty.call(window, "JSON") && typeof JSON.stringify === "function")
(在现代浏览器中,可以使用 Object.hasOwn(globalThis, "JSON")
,但是现代浏览器都有 JSON
)。根据 Edurne Pascual 的评论,这个检查实际上是多余的。 - Sebastian Simon在Web开发中需要处理JSON是很常见的情况,这就是为什么Javascript提供了带有静态方法的JSON
对象。
从字符串解析为对象
要将JSON字符串解析为Javascript对象,我们可以使用JSON.parse()
let obj = JSON.parse('{"x": 325, "y": 896, "speed": 16.5}')
结果:
obj = {
x: 325,
y: 896,
speed: 16.5
}
从对象解析为字符串
将Javascript对象转换为字符串就像反向操作一样简单。
let str = JSON.stringify({x: 325, y: 896, speed: 16.5})
结果:
str = '{"x": 325, "y": 896, "speed": 16.5}'