
- JSON 有用資源
- JSON 快速指南
- JSON - 有用資源
- JSON - 討論
JSON 快速指南
JSON - 概述
JSON(JavaScript 物件表示法)是一種輕量級的基於文字的開放標準,旨在用於人類可讀的資料交換。JSON 使用的約定為程式設計師所熟知,包括 C、C++、Java、Python、Perl 等。
JSON 代表 JavaScript 物件表示法。
該格式由 Douglas Crockford 指定。
它被設計用於人類可讀的資料交換。
它擴充套件自 JavaScript 指令碼語言。
檔名副檔名為 .json。
JSON Internet 媒體型別為 application/json。
統一型別識別符號為 public.json。
JSON 的用途
在編寫基於 JavaScript 的應用程式(包括瀏覽器擴充套件和網站)時使用。
JSON 格式用於透過網路連線序列化和傳輸結構化資料。
它主要用於在伺服器和 Web 應用程式之間傳輸資料。
Web 服務和 API 使用 JSON 格式提供公共資料。
它可以與現代程式語言一起使用。
JSON 的特點
- JSON 易於閱讀和編寫。
- 它是一種輕量級的基於文字的交換格式。
- JSON 與語言無關。
JSON 簡單示例
以下示例顯示如何使用 JSON 儲存與基於主題和版本的書籍相關的資訊。
{ "book": [ { "id":"01", "language": "Java", "edition": "third", "author": "Herbert Schildt" }, { "id":"07", "language": "C++", "edition": "second", "author": "E.Balagurusamy" } ] }
瞭解上述程式後,我們將嘗試另一個示例。讓我們將以下程式碼儲存為 json.htm −
<html> <head> <title>JSON example</title> <script language = "javascript" > var object1 = { "language" : "Java", "author" : "herbert schildt" }; document.write("<h1>JSON with JavaScript example</h1>"); document.write("<br>"); document.write("<h3>Language = " + object1.language+"</h3>"); document.write("<h3>Author = " + object1.author+"</h3>"); var object2 = { "language" : "C++", "author" : "E-Balagurusamy" }; document.write("<br>"); document.write("<h3>Language = " + object2.language+"</h3>"); document.write("<h3>Author = " + object2.author+"</h3>"); document.write("<hr />"); document.write(object2.language + " programming language can be studied " + "from book written by " + object2.author); document.write("<hr />"); </script> </head> <body> </body> </html>
現在讓我們嘗試使用 IE 或任何其他支援 JavaScript 的瀏覽器開啟 json.htm,這將產生以下結果 −

有關 JSON 物件的更多資訊,請參閱 JSON 物件章節。
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 格式支援以下資料型別 −
序號 | 型別和描述 |
---|---|
1 |
數字 JavaScript 中的雙精度浮點格式 |
2 |
字串 用反斜槓轉義的雙引號 Unicode |
3 |
布林值 true 或 false |
4 |
陣列 值的順序序列 |
5 |
值 它可以是字串、數字、true 或 false、null 等 |
6 |
物件 鍵值對的無序集合 |
7 |
空白 可以在任何一對標記之間使用 |
8 |
null 空 |
數字
它是 JavaScript 中的雙精度浮點格式,它取決於實現。
不使用八進位制和十六進位制格式。
數字中不使用 NaN 或 Infinity。
下表顯示了數字型別 −
序號 | 型別和描述 |
---|---|
1 |
整數 數字 1-9、0 和正數或負數 |
2 |
分數 像 .3、.9 這樣的分數 |
3 |
指數 像 e、e+、e-、E、E+、E- 這樣的指數 |
語法
var json-object-name = { string : number_value, .......}
示例
顯示數字資料型別的示例,值不應加引號 −
var obj = {marks: 97}
字串
它是零個或多個用反斜槓轉義的雙引號 Unicode 字元的序列。
字元是單個字元字串,即長度為 1 的字串。
該表顯示了您可以在 JSON 文件的字串中使用的各種特殊字元 −
序號 | 型別和描述 |
---|---|
1 |
" 雙引號 |
2 |
\ 反斜槓 |
3 |
/ 正斜槓 |
4 |
b 退格 |
5 | f 換頁 |
6 | n 換行 |
7 | r 回車 |
8 | t 水平製表符 |
9 | u 四個十六進位制數字 |
語法
var json-object-name = { string : "string value", .......}
示例
顯示字串資料型別的示例 −
var obj = {name: 'Amit'}
布林值
它包括 true 或 false 值。
語法
var json-object-name = { string : true/false, .......}
示例
var obj = {name: 'Amit', marks: 97, distinction: true}
陣列
它是值的順序集合。
這些都用方括號括起來,這意味著陣列以“[”開頭,以“]”結尾。
值用 ','(逗號)分隔。
陣列索引可以從 0 或 1 開始。
當鍵名是連續整數時,應使用陣列。
語法
[ value, .......]
示例
顯示包含多個物件的陣列的示例 −
{ "books": [ { "language":"Java" , "edition":"second" }, { "language":"C++" , "lastName":"fifth" }, { "language":"C" , "lastName":"third" } ] }
物件
它是名稱/值對的無序集合。
物件用花括號括起來,即以 '{' 開頭,以 '}' 結尾。
每個名稱後跟 ':'(冒號),鍵/值對用 ','(逗號)分隔。
鍵必須是字串,並且彼此不同。
當鍵名是任意字串時,應使用物件。
語法
{ string : value, .......}
示例
顯示物件的示例 −
{ "id": "011A", "language": "JAVA", "price": 500, }
空白
它可以插入任何一對標記之間。可以新增它以使程式碼更易讀。示例顯示帶和不帶空格的宣告 −
語法
{string:" ",....}
示例
var obj1 = {"name": "Sachin Tendulkar"} var obj2 = {"name": "SauravGanguly"}
null
它表示空型別。
語法
null
示例
var i = null; if(i == 1) { document.write("<h1>value is 1</h1>"); } else { document.write("<h1>value is null</h1>"); }
JSON 值
它包括 −
- 數字(整數或浮點數)
- 字串
- 布林值
- 陣列
- 物件
- null
語法
String | Number | Object | Array | TRUE | FALSE | NULL
示例
var i = 1; var j = "sachin"; var k = null;
JSON - 物件
建立簡單的物件
可以使用 JavaScript 建立 JSON 物件。讓我們看看使用 JavaScript 建立 JSON 物件的各種方法 −
- 建立空物件 −
var JSONObj = {};
- 建立新物件 −
var JSONObj = new Object();
建立具有值為字串的屬性 bookname 和數值的屬性 price 的物件。使用 '.' 運算子訪問屬性 −
var JSONObj = { "bookname ":"VB BLACK BOOK", "price":500 };
這是一個示例,它顯示了使用 JSON 在 JavaScript 中建立物件的方法,將以下程式碼儲存為 json_object.htm −
<html> <head> <title>Creating Object JSON with JavaScript</title> <script language = "javascript" > var JSONObj = { "name" : "tutorialspoint.com", "year" : 2005 }; document.write("<h1>JSON with JavaScript example</h1>"); document.write("<br>"); document.write("<h3>Website Name = "+JSONObj.name+"</h3>"); document.write("<h3>Year = "+JSONObj.year+"</h3>"); </script> </head> <body> </body> </html>
現在讓我們嘗試使用 IE 或任何其他支援 javaScript 的瀏覽器開啟 Json 物件。它會產生以下結果 −

建立陣列物件
以下示例顯示了使用 JSON 在 javascript 中建立陣列物件的方法,將以下程式碼儲存為 json_array_object.htm −
<html> <head> <title>Creation of array object in javascript using JSON</title> <script language = "javascript" > document.writeln("<h2>JSON array object</h2>"); var books = { "Pascal" : [ { "Name" : "Pascal Made Simple", "price" : 700 }, { "Name" : "Guide to Pascal", "price" : 400 }], "Scala" : [ { "Name" : "Scala for the Impatient", "price" : 1000 }, { "Name" : "Scala in Depth", "price" : 1300 }] } var i = 0 document.writeln("<table border = '2'><tr>"); for(i = 0;i<books.Pascal.length;i++) { document.writeln("<td>"); document.writeln("<table border = '1' width = 100 >"); document.writeln("<tr><td><b>Name</b></td><td width = 50>" + books.Pascal[i].Name+"</td></tr>"); document.writeln("<tr><td><b>Price</b></td><td width = 50>" + books.Pascal[i].price +"</td></tr>"); document.writeln("</table>"); document.writeln("</td>"); } for(i = 0;i<books.Scala.length;i++) { document.writeln("<td>"); document.writeln("<table border = '1' width = 100 >"); document.writeln("<tr><td><b>Name</b></td><td width = 50>" + books.Scala[i].Name+"</td></tr>"); document.writeln("<tr><td><b>Price</b></td><td width = 50>" + books.Scala[i].price+"</td></tr>"); document.writeln("</table>"); document.writeln("</td>"); } document.writeln("</tr></table>"); </script> </head> <body> </body> </html>
現在讓我們嘗試使用 IE 或任何其他支援 javaScript 的瀏覽器開啟 Json 陣列物件。它會產生以下結果 −

JSON - 模式
JSON 模式是基於 JSON 的格式的規範,用於定義 JSON 資料的結構。它是在 IETF 草案下編寫的,該草案於 2011 年過期。JSON 模式 −
- 描述您現有的資料格式。
- 清晰、易於閱讀的人機可讀文件。
- 完整的結構驗證,可用於自動化測試。
- 完整的結構驗證,驗證客戶端提交的資料。
JSON 模式驗證庫
目前有幾種可用於不同程式語言的驗證器。目前可用的最完整和最符合 JSON 模式的驗證器是 JSV。
語言 | 庫 |
---|---|
C | WJElement (LGPLv3) |
Java | json-schema-validator (LGPLv3) |
.NET | Json.NET (MIT) |
ActionScript 3 | Frigga (MIT) |
Haskell | aeson-schema (MIT) |
Python | Jsonschema |
Ruby | autoparse (ASL 2.0); ruby-jsonschema (MIT) |
PHP | php-json-schema (MIT). json-schema (Berkeley) |
JavaScript | Orderly (BSD); JSV; json-schema; Matic (MIT); Dojo; Persevere (modified BSD or AFL 2.0); schema.js. |
JSON 模式示例
下面是一個基本的 JSON 模式,它涵蓋了經典的產品目錄描述 −
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Product", "description": "A product from Acme's catalog", "type": "object", "properties": { "id": { "description": "The unique identifier for a product", "type": "integer" }, "name": { "description": "Name of the product", "type": "string" }, "price": { "type": "number", "minimum": 0, "exclusiveMinimum": true } }, "required": ["id", "name", "price"] }
讓我們檢查一下可以在此模式中使用的各種重要關鍵字 −
序號 | 關鍵字和描述 |
---|---|
1 |
$schema $schema 關鍵字宣告此模式是根據草案 v4 規範編寫的。 |
2 |
title 您將使用它來為您的模式命名。 |
3 |
description 模式的簡短描述。 |
4 |
type type 關鍵字定義了對我們 JSON 資料的第一個約束:它必須是 JSON 物件。 |
5 |
properties 定義各種鍵及其值型別、JSON 檔案中要使用的最小值和最大值。 |
6 |
required 這保留了必需屬性的列表。 |
7 |
minimum 這是要對值施加的約束,表示最小可接受值。 |
8 |
exclusiveMinimum 如果存在 "exclusiveMinimum" 並且其布林值為 true,則如果例項嚴格大於 "minimum" 的值,則該例項有效。 |
9 |
maximum 這是要對值施加的約束,表示最大可接受值。 |
10 |
exclusiveMaximum 如果存在 "exclusiveMaximum" 並且其布林值為 true,則如果例項嚴格小於 "maximum" 的值,則該例項有效。 |
11 |
multipleOf 如果將例項除以此關鍵字的值的結果為整數,則數值例項對 "multipleOf" 有效。 |
12 |
maxLength 字串例項的長度定義為其字元的最大數量。 |
13 |
minLength 字串例項的長度定義為其字元的最小數量。 |
14 |
pattern 如果正則表示式成功匹配例項,則字串例項被認為有效。 |
您可以檢視 http://json-schema.org 以獲取可在定義 JSON 模式時使用的關鍵字的完整列表。上述模式可用於測試以下 JSON 程式碼的有效性 −
[ { "id": 2, "name": "An ice sculpture", "price": 12.50, }, { "id": 3, "name": "A blue mouse", "price": 25.50, } ]
JSON - 與 XML 的比較
JSON 和 XML 都是人類可讀的格式,並且與語言無關。它們都支援在現實世界中建立、讀取和解碼。我們可以根據以下因素將 JSON 與 XML 進行比較 −
冗長
XML 比 JSON 更冗長,因此程式設計師編寫 JSON 更快。
陣列用法
XML 用於描述不包含陣列的結構化資料,而 JSON 包含陣列。
解析
JavaScript 的 eval 方法解析 JSON。當應用於 JSON 時,eval 返回描述的物件。
示例
XML 和 JSON 的單個示例 −
JSON
{ "company": Volkswagen, "name": "Vento", "price": 800000 }
XML
<car> <company>Volkswagen</company> <name>Vento</name> <price>800000</price> </car>
PHP 中使用 JSON
本章介紹如何使用 PHP 程式語言編碼和解碼 JSON 物件。讓我們從準備環境開始,開始使用 PHP 進行 JSON 程式設計。
環境
從 PHP 5.2.0 開始,JSON 擴充套件預設情況下捆綁在 PHP 中並編譯到 PHP 中。
JSON 函式
函式 | 庫 |
---|---|
json_encode | 返回值的 JSON 表示。 |
json_decode | 解碼 JSON 字串。 |
json_last_error | 返回發生的最後錯誤。 |
在 PHP 中編碼 JSON (json_encode)
PHP json_encode() 函式用於在 PHP 中編碼 JSON。此函式在成功時返回值的 JSON 表示,在失敗時返回 FALSE。
語法
string json_encode ( $value [, $options = 0 ] )
引數
value − 正在編碼的值。此函式僅適用於 UTF-8 編碼的資料。
options − 此可選值是位掩碼,由 JSON_HEX_QUOT、JSON_HEX_TAG、JSON_HEX_AMP、JSON_HEX_APOS、JSON_NUMERIC_CHECK、JSON_PRETTY_PRINT、JSON_UNESCAPED_SLASHES、JSON_FORCE_OBJECT 組成。
示例
以下示例顯示如何使用 PHP 將陣列轉換為 JSON −
<?php $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); echo json_encode($arr); ?>
執行時,這將產生以下結果 −
{"a":1,"b":2,"c":3,"d":4,"e":5}
以下示例顯示如何將 PHP 物件轉換為 JSON −
<?php class Emp { public $name = ""; public $hobbies = ""; public $birthdate = ""; } $e = new Emp(); $e->name = "sachin"; $e->hobbies = "sports"; $e->birthdate = date('m/d/Y h:i:s a', "8/5/1974 12:20:03 p"); $e->birthdate = date('m/d/Y h:i:s a', strtotime("8/5/1974 12:20:03")); echo json_encode($e); ?>
執行時,這將產生以下結果 −
{"name":"sachin","hobbies":"sports","birthdate":"08\/05\/1974 12:20:03 pm"}
在 PHP 中解碼 JSON (json_decode)
PHP 的 `json_decode()` 函式用於解碼 JSON 資料。此函式將 JSON 資料解碼為相應的 PHP 資料型別。
語法
mixed json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
引數
json_string − 一個編碼後的字串,必須是 UTF-8 編碼的資料。
assoc − 布林型引數,設定為 TRUE 時,返回的物件將轉換為關聯陣列。
depth − 整型引數,指定遞迴深度。
options − 整型引數,JSON 解碼的位掩碼,支援 JSON_BIGINT_AS_STRING。
示例
以下示例演示如何使用 PHP 解碼 JSON 物件:
<?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?>
執行後,將產生以下結果:
object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
Perl 中使用 JSON
本章介紹如何使用 Perl 程式語言編碼和解碼 JSON 物件。讓我們從準備 Perl JSON 程式設計環境開始。
環境
在使用 Perl 編碼和解碼 JSON 之前,您需要安裝 JSON 模組,該模組可以從 CPAN 獲取。下載 JSON-2.53.tar.gz 或任何其他最新版本後,請按照以下步驟操作:
$tar xvfz JSON-2.53.tar.gz $cd JSON-2.53 $perl Makefile.PL $make $make install
JSON 函式
函式 | 庫 |
---|---|
encode_json | 將給定的 Perl 資料結構轉換為 UTF-8 編碼的二進位制字串。 |
decode_json | 解碼 JSON 字串。 |
to_json | 將給定的 Perl 資料結構轉換為 JSON 字串。 |
from_json | 接收一個 JSON 字串並嘗試解析它,返回結果引用。 |
convert_blessed | 使用此函式的真值,以便 Perl 可以使用物件的類的 TO_JSON 方法將物件轉換為 JSON。 |
在 Perl 中編碼 JSON (encode_json)
Perl 的 `encode_json()` 函式將給定的 Perl 資料結構轉換為 UTF-8 編碼的二進位制字串。
語法
$json_text = encode_json ($perl_scalar ); or $json_text = JSON->new->utf8->encode($perl_scalar);
示例
以下示例演示 Perl 中 JSON 中的陣列:
#!/usr/bin/perl use JSON; my %rec_hash = ('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); my $json = encode_json \%rec_hash; print "$json\n";
執行時,這將產生以下結果 −
{"e":5,"c":3,"a":1,"b":2,"d":4}
以下示例演示如何將 Perl 物件轉換為 JSON:
#!/usr/bin/perl package Emp; sub new { my $class = shift; my $self = { name => shift, hobbies => shift, birthdate => shift, }; bless $self, $class; return $self; } sub TO_JSON { return { %{ shift() } }; } package main; use JSON; my $JSON = JSON->new->utf8; $JSON->convert_blessed(1); $e = new Emp( "sachin", "sports", "8/5/1974 12:20:03 pm"); $json = $JSON->encode($e); print "$json\n";
執行後,將產生以下結果:
{"birthdate":"8/5/1974 12:20:03 pm","name":"sachin","hobbies":"sports"}
在 Perl 中解碼 JSON (decode_json)
Perl 的 `decode_json()` 函式用於在 Perl 中解碼 JSON 資料。此函式將 JSON 資料解碼為相應的 Perl 資料型別。
語法
$perl_scalar = decode_json $json_text or $perl_scalar = JSON->new->utf8->decode($json_text)
示例
以下示例演示如何使用 Perl 解碼 JSON 物件。如果您機器上尚未安裝 Data::Dumper 模組,則需要安裝它。
#!/usr/bin/perl use JSON; use Data::Dumper; $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; $text = decode_json($json); print Dumper($text);
執行後,將產生以下結果:
$VAR1 = { 'e' => 5, 'c' => 3, 'a' => 1, 'b' => 2, 'd' => 4 };
Python 中使用 JSON
本章介紹如何使用 Python 程式語言編碼和解碼 JSON 物件。讓我們從準備 Python JSON 程式設計環境開始。
環境
在使用 Python 編碼和解碼 JSON 之前,您需要安裝任何可用的 JSON 模組。在本教程中,我們下載並安裝了 Demjson,方法如下:
$tar xvfz demjson-1.6.tar.gz $cd demjson-1.6 $python setup.py install
JSON 函式
函式 | 庫 |
---|---|
encode | 將 Python 物件編碼為 JSON 字串表示形式。 |
decode | 將 JSON 編碼的字串解碼為 Python 物件。 |
在 Python 中編碼 JSON (encode)
Python 的 `encode()` 函式將 Python 物件編碼為 JSON 字串表示形式。
語法
demjson.encode(self, obj, nest_level=0)
示例
以下示例演示 Python 中 JSON 中的陣列。
#!/usr/bin/python import demjson data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ] json = demjson.encode(data) print json
執行時,這將產生以下結果 −
[{"a":1,"b":2,"c":3,"d":4,"e":5}]
在 Python 中解碼 JSON (decode)
Python 可以使用 `demjson.decode()` 函式解碼 JSON。此函式將 JSON 資料解碼為相應的 Python 資料型別。
語法
demjson.decode(self, txt)
示例
以下示例演示如何使用 Python 解碼 JSON 物件。
#!/usr/bin/python import demjson json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; text = demjson.decode(json) print text
執行後,將產生以下結果:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
Ruby 中使用 JSON
本章介紹如何使用 Ruby 程式語言編碼和解碼 JSON 物件。讓我們從準備 Ruby JSON 程式設計環境開始。
環境
在使用 Ruby 編碼和解碼 JSON 之前,您需要安裝任何可用的 Ruby JSON 模組。您可能需要安裝 Ruby gem,但如果您執行的是最新版本的 Ruby,那麼您的機器上一定已經安裝了 gem,否則,假設您已經安裝了 gem,讓我們按照以下單個步驟操作:
$gem install json
使用 Ruby 解析 JSON
以下示例顯示前兩個鍵儲存字串值,後三個鍵儲存字串陣列。讓我們將以下內容儲存在名為 input.json 的檔案中。
{ "President": "Alan Isaac", "CEO": "David Richardson", "India": [ "Sachin Tendulkar", "Virender Sehwag", "Gautam Gambhir" ], "Srilanka": [ "Lasith Malinga", "Angelo Mathews", "Kumar Sangakkara" ], "England": [ "Alastair Cook", "Jonathan Trott", "Kevin Pietersen" ] }
下面是一個 Ruby 程式,將用於解析上面提到的 JSON 文件:
#!/usr/bin/ruby require 'rubygems' require 'json' require 'pp' json = File.read('input.json') obj = JSON.parse(json) pp obj
執行後,將產生以下結果:
{ "President"=>"Alan Isaac", "CEO"=>"David Richardson", "India"=> ["Sachin Tendulkar", "Virender Sehwag", "Gautam Gambhir"], "Srilanka"=> ["Lasith Malinga ", "Angelo Mathews", "Kumar Sangakkara"], "England"=> ["Alastair Cook", "Jonathan Trott", "Kevin Pietersen"] }
Java 中使用 JSON
本章介紹如何使用 Java 程式語言編碼和解碼 JSON 物件。讓我們從準備 Java JSON 程式設計環境開始。
環境
在使用 Java 編碼和解碼 JSON 之前,您需要安裝任何可用的 JSON 模組。在本教程中,我們下載並安裝了 JSON.simple,並將 json-simple-1.1.1.jar 檔案的位置新增到環境變數 CLASSPATH。
JSON 和 Java 實體之間的對映
JSON.simple 在解碼或解析時將左側的實體對映到右側,在編碼時將右側的實體對映到左側。
JSON | Java |
---|---|
字串 | java.lang.String |
數字 | java.lang.Number |
true|false | java.lang.Boolean |
null | null |
陣列 | java.util.List |
物件 | java.util.Map |
解碼時,java.util.List 的預設具體類是 org.json.simple.JSONArray,java.util.Map 的預設具體類是 org.json.simple.JSONObject。
在 Java 中編碼 JSON
以下是一個簡單的示例,演示如何使用 Java JSONObject(java.util.HashMap 的子類)編碼 JSON 物件。沒有提供排序。如果您需要元素的嚴格排序,請使用 JSONValue.toJSONString(map) 方法和有序對映實現(例如 java.util.LinkedHashMap)。
import org.json.simple.JSONObject; class JsonEncodeDemo { public static void main(String[] args) { JSONObject obj = new JSONObject(); obj.put("name", "foo"); obj.put("num", new Integer(100)); obj.put("balance", new Double(1000.21)); obj.put("is_vip", new Boolean(true)); System.out.print(obj); } }
編譯並執行上述程式後,將生成以下結果:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
以下另一個示例顯示了使用 Java JSONObject 進行 JSON 物件流:
import org.json.simple.JSONObject; class JsonEncodeDemo { public static void main(String[] args) { JSONObject obj = new JSONObject(); obj.put("name","foo"); obj.put("num",new Integer(100)); obj.put("balance",new Double(1000.21)); obj.put("is_vip",new Boolean(true)); StringWriter out = new StringWriter(); obj.writeJSONString(out); String jsonText = out.toString(); System.out.print(jsonText); } }
編譯並執行上述程式後,將生成以下結果:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
在 Java 中解碼 JSON
以下示例使用了 JSONObject 和 JSONArray,其中 JSONObject 是 java.util.Map,JSONArray 是 java.util.List,因此您可以使用 Map 或 List 的標準操作來訪問它們。
import org.json.simple.JSONObject; import org.json.simple.JSONArray; import org.json.simple.parser.ParseException; import org.json.simple.parser.JSONParser; class JsonDecodeDemo { public static void main(String[] args) { JSONParser parser = new JSONParser(); String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]"; try{ Object obj = parser.parse(s); JSONArray array = (JSONArray)obj; System.out.println("The 2nd element of array"); System.out.println(array.get(1)); System.out.println(); JSONObject obj2 = (JSONObject)array.get(1); System.out.println("Field \"1\""); System.out.println(obj2.get("1")); s = "{}"; obj = parser.parse(s); System.out.println(obj); s = "[5,]"; obj = parser.parse(s); System.out.println(obj); s = "[5,,2]"; obj = parser.parse(s); System.out.println(obj); }catch(ParseException pe) { System.out.println("position: " + pe.getPosition()); System.out.println(pe); } } }
編譯並執行上述程式後,將生成以下結果:
The 2nd element of array {"1":{"2":{"3":{"4":[5,{"6":7}]}}}} Field "1" {"2":{"3":{"4":[5,{"6":7}]}}} {} [5] [5,2]
Ajax 中使用 JSON
AJAX 是非同步 JavaScript 和 XML,它在客戶端用作一組相互關聯的 Web 開發技術,用於建立非同步 Web 應用程式。根據 AJAX 模型,Web 應用程式可以非同步地向伺服器傳送和檢索資料,而不會干擾現有頁面的顯示和行為。
許多開發人員使用 JSON 在客戶端和伺服器之間傳遞 AJAX 更新。更新即時體育比分的網站可以被認為是 AJAX 的一個例子。如果這些分數必須在網站上更新,則必須將它們儲存在伺服器上,以便網頁在需要時可以檢索分數。這就是我們可以使用 JSON 格式化資料的地方。
使用 AJAX 更新的任何資料都可以使用 JSON 格式儲存在 Web 伺服器上。使用 AJAX,JavaScript 可以根據需要檢索這些 JSON 檔案,解析它們,並執行以下操作之一:
將解析後的值儲存在變數中,以便在將它們顯示在網頁上之前進行進一步處理。
它直接將資料分配給網頁中的 DOM 元素,以便它們顯示在網站上。
示例
以下程式碼顯示了 AJAX 中的 JSON。將其儲存為 ajax.htm 檔案。這裡非同步載入 JSON 資料使用的是 loadJSON() 函式。
<html> <head> <meta content = "text/html; charset = ISO-8859-1" http-equiv = "content-type"> <script type = "application/javascript"> function loadJSON() { var data_file = "https://tutorialspoint.tw/json/data.json"; var http_request = new XMLHttpRequest(); try{ // Opera 8.0+, Firefox, Chrome, Safari http_request = new XMLHttpRequest(); }catch (e) { // Internet Explorer Browsers try{ http_request = new ActiveXObject("Msxml2.XMLHTTP"); }catch (e) { try{ http_request = new ActiveXObject("Microsoft.XMLHTTP"); }catch (e) { // Something went wrong alert("Your browser broke!"); return false; } } } http_request.onreadystatechange = function() { if (http_request.readyState == 4 ) { // Javascript function JSON.parse to parse JSON data var jsonObj = JSON.parse(http_request.responseText); // jsonObj variable now contains the data structure and can // be accessed as jsonObj.name and jsonObj.country. document.getElementById("Name").innerHTML = jsonObj.name; document.getElementById("Country").innerHTML = jsonObj.country; } } http_request.open("GET", data_file, true); http_request.send(); } </script> <title>tutorialspoint.com JSON</title> </head> <body> <h1>Cricketer Details</h1> <table class = "src"> <tr><th>Name</th><th>Country</th></tr> <tr><td><div id = "Name">Sachin</div></td> <td><div id = "Country">India</div></td></tr> </table> <div class = "central"> <button type = "button" onclick = "loadJSON()">Update Details </button> </div> </body> </html>
下面是輸入檔案 data.json,其中包含 JSON 格式的資料,當我們單擊“更新詳情”按鈕時,將非同步上傳這些資料。此檔案儲存在 https://tutorialspoint.tw/json/
{"name": "Brett", "country": "Australia"}
上面的 HTML 程式碼將生成以下螢幕,您可以在其中檢查 AJAX 的實際效果:
板球運動員詳情
姓名 | 國家 |
---|---|
薩欽 |
印度 |
單擊“更新詳情”按鈕時,您應該得到類似如下結果。您可以自己嘗試 AJAX 中的 JSON,前提是您的瀏覽器支援 Javascript。
板球運動員詳情
姓名 | 國家 |
---|---|
佈雷特 |
澳大利亞 |