JSON.parse()
JSON 的常規用途是同 web 服務器進行數據傳輸。
在從 web 服務器接收數據時,數據永遠是字符串。
通過 JSON.parse()
解析數據,這些數據會成為 JavaScript 對象。
實例 – 解析 JSON
請想象一下我們從 web 服務器接收到這段文本:
'{ "name":"Bill Gates", "age":62, "city":"Seattle"}'
請使用 JavaScript 函數 JSON.parse()
把文本轉換為 JavaScript 對象:
var obj = JSON.parse('{ "name":"Bill Gates", "age":62, "city":"Seattle"}');
請確保這段文本以 JSON 格式書寫,否則會出現語法錯誤。
請在您的頁面中使用 JavaScript 對象:
實例
<p id="demo"></p> <script> document.getElementById("demo").innerHTML = obj.name + ", " + obj.age; </script>
來自服務器的 JSON
您能夠通過使用 AJAX 請求從服務器請求 JSON。
只要服務器的響應是用 JSON 格式編寫的,你可以將字符串解析成 JavaScript 對象。
實例
請使用 XMLHttpRequest 從服務器獲取數據:
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 是數組:
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 中不允許日期對象。
如果您需要包含日期,請寫為字符串。
之后您可以將其轉換回日期對象:
實例
把字符串轉換為日期:
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 函數:
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 中不允許函數。
如果您需要包含函數,請把它寫作字符串。
稍后您可以把它轉換回函數:
實例
把字符串轉換為函數:
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 |
對于更老的瀏覽器,以下地址中的 JavaScript 庫是可用的: