2009-11-08 39 views
5

你能用最簡單的話來解釋嗎?什麼是json,你能解釋給新手嗎?

最好帶一個演示腳本。

+11

這有什麼錯上http://json.org/的描寫的特徵? – tangens 2009-11-08 09:45:13

+0

嘗試用那裏提出的那些...它有4個網站,所有的描述和初學者...首先自己練習並閱讀那些 – 2009-11-08 09:58:20

+1

JavaScript Object Notation – dlamblin 2009-11-08 10:56:59

回答

18

JSON是共享數據(通常在瀏覽器和服務器之間)的一種方式。

的JavaScript允許兩種方式來存儲值的集合:

//arrays: 
[value, value, value] 
//objects: 
{key:value, key:value, key:value} 

在某些時候,被稱爲道格意識到,這通常是最有效的將數據發送給JavaScript已經建立像對象的大師。 [而不是PHP發送逗號分隔的字符串,後數據,XML甚至HTML,所有這些都必須經過JavaScript精心分析]。

所以他把這個想法稱爲JSON,爲它寫了一個規範,並且標準誕生了。

例如,假設您的login.php腳本應該返回的用戶名,約佔總帖子,和日以來登記:

//XML 
"<xml..><details>\ 
    <user>Jim</user><posts>239</posts><since>Jan09</since>\ 
</details>" 
//POSTData 
"user=Jim&posts=239&since=Jan09" 
//JSON 
"{user:'Jim', posts:239, since:'Jan09'}" 

最後一個可以通過JS(使用eval)輕鬆解析,細節可以直觀地使用:

var user = details.user; 

編輯:

有人正確地指出,要有效的JSON,所有的字符串必須用雙引號。 這樣做的目的是爲了防止JS在保留關鍵字上出現cro(聲(在JS中不能使用某些詞,如class,除非它們被引用,因此不能使用{class:'mike'})。

還應該指出的是,PHP 5.2 +具有可用於創建或JSON解析功能:

​​3210

json_decode功能只會工作,如果JSON是有效的,所以有時候很重要讓這些雙引號正確。

+1

你的例子是無效的JSON,stringkeys必須有引號。 – truppo 2009-11-17 09:03:06

+0

我知道,但覺得多餘的引號會混淆問題。 Crockford表示,使用Javascript 1.3+時,他可能會從標準中降低報價要求,所以這不是一個完全不公平的捷徑。 – SamGoody 2009-11-17 09:30:23

+0

此外,我將不得不雙引號字符鍵和鍵是有效的,這將需要我只單引用整個字符串,這將看起來很奇怪。 – SamGoody 2009-11-17 09:33:43

1

JSON是創建數據結構的Javascript源代碼。

12

它基本上是一種用文本描述對象的方式 - 一種基於文本的序列化格式。然而,它的美妙之處在於它也只是普通的JavaScript。 JavaScript的語法允許對象以一種非常簡潔的格式進行初始化,並且該格式在其他語言中也很容易生成/解析。

所以,你在JavaScript中獲得「內置」反序列化(即你可以解釋文本代碼),沒有額外的庫,和其他平臺可以創建它,通常有一個圖書館。 (通常爲Web服務器將生成JSON的瀏覽器來解釋。)


這是假設你完全信任你的數據源,當然 - 執行任意文本代碼是從安全角度來看,相當危險。

+0

+1提及它主要是一種數據格式。 – Gumbo 2009-11-08 10:50:07

3

JSON是聲明數據結構的Javascript源代碼,通常由Web服務器發送到瀏覽器。瀏覽器通過普通的JavaScript解析器運行代碼,並彈出一個數據結構。

一個JavaScript聲明可能看起來像:

var myvar = {"column1": "valuie1"}; 
      ^^^^^^^^^^^^^^^^^^^^^^ 

的部分與^^^了後來被稱爲JSON下劃線。

所以在早期,一些JavaScript將抓住從服務器的文本,並對其進行分析,如:

var myvar = eval('(' + textfromserver + ')'); 

由於EVAL是危險的,它現在更常用,如:

var myObject = JSON.parse(myJSONtext); 

這是一個黑客這麼多人認爲有用,他們把它作爲一個標準。有關更詳盡的解釋,請參閱this wikepedia page

0

我會盡量簡化。如果您完全熟悉XML,那麼它就像XML原則上一樣,它以易於閱讀的方式爲人類和程序存儲數據。它被標記爲「數據交換格式」,因爲您將看到它用作在一個程序與另一個程序之間移動數據的中介。

例如,您可能有某個數據庫,您希望其他人從他們自己的程序中獲取信息並使用它們。您可以通過編寫某種JSON圖層來限制他們的訪問,而不是讓他們完全訪問數據庫。然後人們可以像訪問RSS源一樣訪問JSON。真實的例子:雅虎爲他們的搜索引擎提供了一個JSON層,以便人們可以編寫能夠運行雅虎搜索並將結果直接發送到桌面小部件的桌面小部件(或其他任何東西)。

使用諸如JSON之類的醜陋的替代方法可能是讓程序獲取網頁的HTML內容並以某種方式找到所需的信息。 (如果網站的HTML佈局發生變化,則必須更改程序。)

+0

你也可以使用json定義函數 – Chris 2009-11-08 10:52:39

+0

@Chris:不,你不能。 – Ryan 2013-07-28 00:13:50

+0

@minitech:當然,它是:var o = {f:function(){alert('yes we can can!')}};的(); – Chris 2013-10-26 21:30:17

0

如果你想看到的東西幾乎做到觀看這部影片,這表明JSON Click here to see the JSON video

JSON(JavaScript對象符號)是一個簡單的數據交換格式,它可以幫助喜歡的Servlet,JSP JavaScript和服務器端技術之間進行通信, WCF,ASP.Net等。

JSON的格式如下所示。以下格式表示具有「CustomerCode」和「CustomerName」屬性的「Customer」對象。

![{"CustomerCode":"1001","CustomerName":"Shiv"}][2] 

enter image description here

現在這種格式可以很容易地通過JavaScript的消耗,並且在到javascript對象變換。看看上面的圖,我們已經提供了JSON到JavaScript變量,你可以看到一個javascript對象是如何用「CustomerCode」和「CustomerName」屬性進行評估的。

enter image description here

如果你看一下網絡架構,它有兩個部分瀏覽器和服務器。在瀏覽器端Javascript是最突出和最好的語言,而在服務器端你有不同的技術,如JSP,ASP.NET,PHP等。

所以如果服務器端技術發出JSON格式,可以很容易地轉換在JavaScript對象,這將真正緩解多種服務器端技術和JavaScript語言之間的通信。

0

JSON(JavaScript Object Notation)是一個輕量級格式,用於數據交換。它也是JavaScript的Object Notation的一個子集(objects用JavaScript構建的方式)。

JSON是一種以這種方式序列化的方式,即它成爲JavaScript代碼。在執行時(使用eval或其他方式),此代碼將創建並返回一個JavaScript對象,其中包含您序列化的數據。這是可用的,因爲JavaScript允許以下語法:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements 
var MyObject = { 
    'StringProperty' : 'Value', 
    'IntProperty' : 12, 
    'ArrayProperty' : [ 1, 2, 3], 
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' } 
}; // MyObject is now an object with property values set. 

您可以將其用於多種目的。首先,將數據從服務器後端傳遞到JavaScript代碼是一種很好的方式。因此,這在AJAX中經常使用。

您也可以將其用作獨立的序列化機制,它比XML更簡單,佔用的空間更少。有許多庫允許您使用JSON序列化和反序列化各種編程語言的對象。

這是一個非常快速和簡潔的文章。 http://secretgeek.net/json_3mins.asp

(日Thnx到MSON,Vilx)

相關問題