JSON.stringify()-JSON 使用-JSONP 教程文檔大全學習知識點

JSON.stringify()

JSON.stringify()-JSON 使用-JSONP 教程文檔大全學習知識點

JSON 通常用於與服務端交換數據。

在向服務器發送數據時一般是字符串。

我們可以使用 JSON.stringify() 方法將 JavaScript 對象轉換為字符串。

語法

JSON.stringify(value[, replacer[, space]])

參數說明:

  • value:

    必需, 一個有效的 JSON 字符串。

  • replacer:

    可選。用於轉換結果的函數或數組。

    如果 replacer 為函數,則 JSON.stringify 將調用該函數,並傳入每個成員的鍵和值。使用返回值而不是原始值。如果此函數返回 undefined,則排除成員。根對象的鍵是一個空字符串:""。

    如果 replacer 是一個數組,則僅轉換該數組中具有鍵值的成員。成員的轉換順序與鍵在數組中的順序一樣。當 value 參數也為數組時,將忽略 replacer 數組。

  • space:

    可選,文本添加縮進、空格和換行符,如果 space 是一個數字,則返回值文本在每個級別縮進指定數目的空格,如果 space 大於 10,則文本縮進 10 個空格。space 有可以使用非數字,如:\t。


JavaScript 對象轉換

例如我們向服務器發送以下數據:

varobj = {"name":"runoob", "alexa":10000, "site":"www.dongyibiancheng.com"};

我們使用 JSON.stringify() 方法處理以上數據,將其轉換為字符串:

varmyJSON = JSON.stringify(obj);

myJSON 為字符串。

我們可以將 myJSON 發送到服務器:

實例

varobj = {"name":"runoob", "alexa":10000, "site":"www.runoob.com"};varmyJSON = JSON.stringify(obj);document.getElementById("demo").innerHTML = myJSON;

嘗試一下 »


JavaScript 數組轉換

我們也可以將 JavaScript 數組轉換為 JSON 字符串:

實例

vararr = ["Google", "Runoob", "Taobao", "Facebook"];varmyJSON = JSON.stringify(arr);

myJSON 為字符串。

我們可以將 myJSON 發送到服務器:

實例

vararr = ["Google", "Runoob", "Taobao", "Facebook"];varmyJSON = JSON.stringify(arr);document.getElementById("demo").innerHTML = myJSON;

嘗試一下 »


異常

解析數據

JSON 不能存儲 Date 對象。

JSON.stringify() 會將所有日期轉換為字符串。

實例

varobj = {"name":"Runoob", "initDate":newDate(), "site":"www.runoob.com"};varmyJSON = JSON.stringify(obj);document.getElementById("demo").innerHTML = myJSON;

嘗試一下 »

之後你可以再將字符串轉換為 Date 對象。


解析函數

JSON 不允許包含函數,JSON.stringify() 會刪除 JavaScript 對象的函數,包括 key 和 value。

實例

varobj = {"name":"Runoob", "alexa":function(){return10000;}, "site":"www.runoob.com"};varmyJSON = JSON.stringify(obj); document.getElementById("demo").innerHTML = myJSON;

嘗試一下 »

我們可以在執行 JSON.stringify() 函數前將函數轉換為字符串來避免以上問題的發生:

實例

varobj = {"name":"Runoob", "alexa":function(){return10000;}, "site":"www.runoob.com"};obj.alexa = obj.alexa.toString();varmyJSON = JSON.stringify(obj); document.getElementById("demo").innerHTML = myJSON;

嘗試一下 »

不建議在 JSON 中使用函數。


瀏覽器支持

主流瀏覽器都支持 JSON.stringify() 函數:

  • Firefox 3.5

  • Internet Explorer 8

  • Chrome

  • Opera 10

  • Safari 4

JSON 使用


把 JSON 文本轉換為 JavaScript 對象

JSON 最常見的用法之一,是從 web 服務器上讀取 JSON 數據(作為文件或作為 HttpRequest),將 JSON 數據轉換為 JavaScript 對象,然後在網頁中使用該數據。

為了更簡單地為您講解,我們使用字符串作為輸入進行演示(而不是文件)。


JSON 實例 - 來自字符串的對象

創建包含 JSON 語法的 JavaScript 字符串:

vartxt = '{ "sites" : [' +'{ "name":"h5混合開發" , "url":"www.dongyibiancheng.com" },' +'{ "name":"google" , "url":"www.google.com" },' +'{ "name":"微博" , "url":"www.weibo.com" } ]}';

由於 JSON 語法是 JavaScript 語法的子集,JavaScript 函數 eval() 可用於將 JSON 文本轉換為 JavaScript 對象。

eval() 函數使用的是 JavaScript 編譯器,可解析 JSON 文本,然後生成 JavaScript 對象。必須把文本包圍在括號中,這樣才能避免語法錯誤:

var obj = eval ("(" + txt + ")");

在網頁中使用 JavaScript 對象:

實例

vartxt = '{ "sites" : [' +'{ "name":"h5混合開發" , "url":"www.dongyibiancheng.com" },' +'{ "name":"google" , "url":"www.google.com" },' +'{ "name":"微博" , "url":"www.weibo.com" } ]}'; varobj = eval("(" + txt + ")"); document.getElementById("name").innerHTML=obj.sites[0].namedocument.getElementById("url").innerHTML=obj.sites[0].url

嘗試一下 »


JSON 解析器

JSON.stringify()-JSON 使用-JSONP 教程文檔大全學習知識點

eval() 函數可編譯並執行任何 JavaScript 代碼。這隱藏了一個潛在的安全問題。

使用 JSON 解析器將 JSON 轉換為 JavaScript 對象是更安全的做法。JSON 解析器只能識別 JSON 文本,而不會編譯腳本。

在瀏覽器中,這提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。

較新的瀏覽器和最新的 ECMAScript (JavaScript) 標準中均包含了原生的對 JSON 的支持。

Web 瀏覽器支持Web 軟件支持
  • Firefox (Mozilla) 3.5

  • Internet Explorer 8

  • Chrome

  • Opera 10

  • Safari 4

  • jQuery

  • Yahoo UI

  • Prototype

  • Dojo

  • ECMAScript 1.5

嘗試一下 »

對於較老的瀏覽器,可使用 JavaScript 庫: https://github.com/douglascrockford/JSON-js

JSON 格式最初是 originally specified by Douglas Crockford

JSONP 教程

本章節我們將向大家介紹 JSONP 的知識。

Jsonp(JSON with Padding) 是 json 的一種"使用模式",可以讓網頁從別的域名(網站)那獲取資料,即跨域讀取數據。

為什麼我們從不同的域(網站)訪問數據需要一個特殊的技術(JSONP )呢?這是因為同源策略。

同源策略,它是由Netscape提出的一個著名的安全策略,現在所有支持JavaScript 的瀏覽器都會使用這個策略。


JSONP 應用

1. 服務端JSONP格式數據

如客戶想訪問 : http://www.runoob.com/try/ajax/jsonp.php?jsonp=callbackFunction。

假設客戶期望返回JSON數據:["customername1","customername2"]。

真正返回到客戶端的數據顯示為: callbackFunction(["customername1","customername2"])。

服務端文件jsonp.php代碼為:

jsonp.php 文件代碼

<?phpheader('Content-type: application/json');//獲取回調函數名$jsoncallback = htmlspecialchars($_REQUEST['jsoncallback']);//json數據$json_data = '["customername1","customername2"]';//輸出jsonp格式的數據echo$jsoncallback . "(" . $json_data . ")";?>

2. 客戶端實現 callbackFunction 函數

<scripttype="text/javascript">functioncallbackFunction(result, methodName){varhtml = '<ul>'; for(vari = 0; i < result.length; i++){html += '<li>' + result[i] + '</li>'; }html += '</ul>'; document.getElementById('divCustomers').innerHTML = html;}</script>

頁面展示

<divid="divCustomers"></div>

客戶端頁面完整代碼

<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>JSONP 實例</title></head><body><divid="divCustomers"></div><scripttype="text/javascript">

functioncallbackFunction(result, methodName){varhtml = '<ul>'; for(vari = 0; i < result.length; i++){html += '<li>' + result[i] + '</li>'; }html += '</ul>'; document.getElementById('divCustomers').innerHTML = html; }

</script><scripttype="text/javascript"src="http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction"></script></body></html>


jQuery 使用 JSONP

以上代碼可以使用 jQuery 代碼實例:

<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>JSONP 實例</title><scriptsrc="http://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script></head><body><divid="divCustomers"></div><script>

$.getJSON("http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?", function(data){varhtml = '<ul>'; for(vari = 0; i < data.length; i++){html += '<li>' + data[i] + '</li>'; }html += '</ul>'; $('#divCustomers').html(html); });

</script></body></html>

相關推薦

推薦中...