閱讀114 返回首頁    go 阿裏雲 go 技術社區[雲棲]


JavaScript JSON的總結

JSON 是用於存儲和傳輸數據的格式,通常用於服務端向網頁傳遞數據

什麼是 JSON?

JSON英文全稱 JavaScript Object Notation(JavaScript 對象表示法),是一種輕量級的用於存儲和交換文本信息的語法,被設計用於可讀的數據交換,類似 XML,但比 XML 更小、更快,JSON具有自我描述性,更易理解

JSON 簡介

JSON是從 JavaScript 腳本語言中演變而來,使用Javascript語法來描述數據對象,文件名擴展是 .json,但是JSON格式僅僅是一個文本,仍然獨立於語言和平台。JSON 解析器和 JSON 庫支持許多不同的編程語言。 目前非常多的動態(PHP,JSP,.NET)編程語言都支持JSON

JSON 使用範圍

JSON 格式可以用於通過網絡連接序列化和傳輸結構化數據,用於編寫基於 JavaScript 應用程序,包括瀏覽器擴展和網站。JSON 主要用於在服務器和 Web 應用程序之間傳輸數據,Web 服務和 APIs 可以使用 JSON 格式提供公用數據,還可以用於現代編程語言中

JSON 語法

JSON 的語法基本上可以視為 JavaScript 語法的一個子集,包括以下內容:

數據使用名/值對表示

使用大括號保存對象,每個名稱後麵跟著一個 ':'(冒號),名/值對使用 ,(逗號)分割

使用方括號保存數組,數組值使用 ,(逗號)分割

{
    "book": [
        {
            "id":"01",
            "language": "Java",
            "edition": "third",
            "author": "Herbert Schildt"
        },
        {
            "id":"07",
            "language": "C++",
            "edition": "second"
            "author": "E.Balagurusamy"
    }]
}

JSON 支持以下兩種數據結構:

名/值對集合: 這一數據結構由不同的編程語言支持

有序的值列表: 包括數組,列表,向量或序列等等

JSON 語法規則

JSON 語法是 JavaScript 對象語法的子集

數據在名稱/值對中

數據由逗號分隔

花括號保存對象

方括號保存數組

JSON 名稱/值對

JSON 數據的書寫格式是:名稱/值對

名稱/值對包括字段名稱(在雙引號中),後麵寫一個冒號,然後是值:

 {"firstName":"John", "lastName":"Doe"} 

等價於這條 JavaScript 語句:

 firstName = "John", lastName = "Doe"} 

JSON 值

JSON 值可以是:

數字(整數或浮點數)

字符串(在雙引號中)

邏輯值(true 或 false)

數組(在方括號中)

對象(在花括號中)

null

JSON 對象

JSON 對象在花括號中書寫,對象可以包含多個名稱/值對

JSON 數組

JSON 數組在方括號中書寫,數組可包含多個對象

 "employees":[
     {"firstName":"John", "lastName":"Doe"}, 
     {"firstName":"Anna", "lastName":"Smith"}, 
     {"firstName":"Peter", "lastName":"Jones"}
 ]

JSON 使用 JavaScript 語法

因為 JSON 使用 JavaScript 語法,所以無需額外的軟件就能處理 JavaScript 中的 JSON。JavaScript 程序使用內建的 eval() 函數,用 JSON 數據來生成原生的 JavaScript 對象。
通過 JavaScript,您可以創建一個對象數組,並像上麵代碼那樣賦值。然後像這樣訪問 JavaScript 對象數組中的第一項

 employees[0].lastName;

返回的內容是:

 Doe

也可以像這樣修改數據:

employees[0].firstName = "Jonatan";

JSON 文件

JSON 文件的文件類型是 ".json"

JSON 文本的 MIME 類型是 "application/json"

JSON 使用

把 JSON 文本轉換為 JavaScript 對象

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

簡單起見,我們直接設置 JSON 字符串:

首先,創建 JavaScript 字符串,字符傳為 JSON 格式的數據:

var text = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';

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

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

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

在網頁中使用 JavaScript 對象:

<p>
    First Name: <span ></span><br /> 
    Last Name: <span ></span><br /> 
</p> 
<script>
    document.getElementById("fname").innerHTML = obj.employees[1].firstName 
    document.getElementById("lname").innerHTML = obj.employees[1].lastName 
</script>

JSON 解析器

eval() 函數可編譯並執行任何 JavaScript 代碼,這隱藏了一個潛在的安全問題。使用 JSON 解析器將 JSON 轉換為 JavaScript 對象是更安全的做法。JSON 解析器隻能識別 JSON 文本,而不會編譯腳本。在瀏覽器中,提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。較新的瀏覽器和最新的 ECMAScript (JavaScript) 標準中均包含了原生的對 JSON 的支持

JSONP 教程

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

為什麼我們從不同的域(網站)訪問數據需要一個特殊的技術(JSONP )呢?這是因為同源策略。
同源策略,是由Netscape提出的一個著名的安全策略,現在所有支持JavaScript 的瀏覽器都會使用這個策略

JSONP 應用

服務端JSONP格式數據

如客戶想訪問 : /try/ajax/jsonp.php?jsonp=callbackFunction,
假設客戶期望返回JSON數據:["customername1","customername2"]。
真正返回到客戶端的數據顯示為: callbackFunction(["customername1","customername2"])。
服務端文件jsonp.php代碼為:

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

客戶端實現 callbackFunction 函數

<div ></div>
<script type="text/javascript">
function onCustomerLoaded(result, methodName){
    var html = '<ul>';
    for(var i = 0; i < result.length; i++)     {         
        html += '<li>' + result[i] + '</li>';
    }
    html += '</ul>';
    document.getElementById('divCustomers').innerHTML = html;
}
</script>
<script type="text/javascript" src="/try/ajax/jsonp.php?jsoncallback=callbackFunction"></script>

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

<div ></div>
<script>
$.getJSON("/try/ajax/jsonp.php?jsoncallback=?", function(data) {   
    var html = '<ul>';
    for(var i = 0; i < data.length; i++){ 
        html += '<li>' + data[i] + '</li>';
    }
    html += '</ul>';

  $('#divCustomers').html(html); 
});
</script>

最後更新:2017-05-08 21:01:37

  上一篇:go 關於昨晚昨晚的銀河護衛隊2
  下一篇:go 【活動】Apache Flink文檔翻譯誌願者招募!