将一个对象序列化为JSON

213

在JavaScript中,我如何将对象序列化为JSON?

4个回答

298

您正在寻找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"


1
使用JSON.stringify()处理包含数组的JavaScript对象有一个小问题。请查看我的问题:http://stackoverflow.com/questions/25423883/parsing-json-array-gives-error - uylmz
@uylmz,我认为这个漏洞在2023年已经不存在了。 - Sebastian Simon

51

1
我真的需要包括“json2.js”吗?它似乎在没有它的情况下也可以工作。 - Pavel Alexeev
33
不用再包含json2.js了,除非你的目标是非常旧的浏览器:现代浏览器已经包含了JSON对象的本地实现。json2.js的好处在于只有在找不到本地对象时才会使用它。关于浏览器支持的详细说明,请参见[https://dev59.com/ynNA5IYBdhLWcg3wn_Q1]。 - Edurne Pascual

4

为了保持向后兼容性,如果没有本地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)
}

1
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

0

如何在Javascript中使用JSON

在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}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接