JSON.parse()
内容摘要
JSON 的常规用途是同 web 服务器进行数据传输。
在从 web 服务器接收数据时,数据永远是字符串。
通过 JSON.parse() 解析数据,这些数据会成为 JavaScript 对象。
文章正文
JSON 的常规用途是同 web 服务器进行数据传输。
在从 web 服务器接收数据时,数据永远是字符串。
通过 JSON.parse() 解析数据,这些数据会成为 JavaScript 对象。
实例 – 解析 JSON
请想象一下我们从 web 服务器接收到这段文本:
1 | '{ "name":"Bill Gates", "age":62, "city":"Seattle"}' |
请使用 JavaScript 函数 JSON.parse() 把文本转换为 JavaScript 对象:
1 | var obj = JSON.parse( '{ "name":"Bill Gates", "age":62, "city":"Seattle"}' ); |
请确保这段文本以 JSON 格式书写,否则会出现语法错误。
请在您的页面中使用 JavaScript 对象:
实例
1 2 3 4 5 | <p id= "demo" ></p> <script> document.getElementById( "demo" ).innerHTML = obj.name + ", " + obj.age; </script> |
来自服务器的 JSON
您能够通过使用 AJAX 请求从服务器请求 JSON。
只要服务器的响应是用 JSON 格式编写的,你可以将字符串解析成 JavaScript 对象。
实例
请使用 XMLHttpRequest 从服务器获取数据:
1 2 3 4 5 6 7 8 9 | var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if ( this .readyState == 4 && this .status == 200) { myObj = JSON.parse( this .responseText); document.getElementById( "demo" ).innerHTML = myObj.name; } }; xmlhttp.open( "GET" , "json_demo.txt" , true ); xmlhttp.send(); |
作为 JSON 的数组
在对衍生自数组的 JSON 使用 JSON.parse() 后,此方法将返回 JavaScript 数组,而不是 JavaScript 对象。
实例
从服务器返回的 JSON 是数组:
1 2 3 4 5 6 7 8 9 | var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if ( this .readyState == 4 && this .status == 200) { myArr = JSON.parse( this .responseText); document.getElementById( "demo" ).innerHTML = myArr[0]; } }; xmlhttp.open( "GET" , "json_demo_array.txt" , true ); xmlhttp.send(); |
例外
解析日期
JSON 中不允许日期对象。
如果您需要包含日期,请写为字符串。
之后您可以将其转换回日期对象:
实例
把字符串转换为日期:
1 2 3 4 5 | var text = '{ "name":"Bill Gates", "birth":"1955-10-28", "city":"Seattle"}' ; var obj = JSON.parse(text); obj.birth = new Date(obj.birth); document.getElementById( "demo" ).innerHTML = obj.name + ", " + obj.birth; |
或者您可以已使用 JSON.parse() 函数的第二个参数,被称为 reviver。
这个 reviver 参数是函数,在返回值之前,它会检查每个属性。
实例
将字符串转换为日期,使用 reviver 函数:
1 2 3 4 5 6 7 8 9 | var text = '{ "name":"Bill Gates", "birth":"1955-10-28", "city":"Seattle"}' ; var obj = JSON.parse(text, function (key, value) { if (key == "birth" ) { return new Date(value); } else { return value; }}); document.getElementById( "demo" ).innerHTML = obj.name + ", " + obj.birth; |
解析函数
JSON 中不允许函数。
如果您需要包含函数,请把它写作字符串。
稍后您可以把它转换回函数:
实例
把字符串转换为函数:
1 2 3 4 5 | var text = '{ "name":"Bill Gates", "age":"function () {return 62;}", "city":"Seattle"}' ; var obj = JSON.parse(text); obj.age = eval( "(" + obj.age + ")" ); document.getElementById( "demo" ).innerHTML = obj.name + ", " + obj.age(); |
您应该避免在 JSON 中使用函数,函数会丢失它们的作用域,而且您还需要使用 eval() 把它们转换回函数。
浏览器支持
所有主流浏览器以及最新的 ECMAScript (JavaScript) 标准均包含 JSON.parse() 函数:
下表中的数字指定了完全支持 JSON.parse() 函数的首个浏览器版本:
Yes | 8.0 | 3.5 | 4.0 | 10.0 |
代码注释