- org.json 教程
- org.json - 首頁
- org.json - 概述
- org.json - 環境設定
- CSV 示例
- org.json - CDL
- Cookie 示例
- org.json - Cookie
- org.json - CookieList
- HTTP 頭部示例
- org.json - HTTP
- JSON 示例
- org.json - JSONArray
- org.json - JSONML
- org.json - JSONObject
- org.json - JSONStringer
- 屬性示例
- org.json - 屬性
- XML 示例
- org.json - XML
- 異常處理
- org.json - JSONException 處理
- org.json 有用資源
- org.json 快速指南
- org.json - 有用資源
- org.json - 討論
Org.Json 快速指南
org.json - 概述
org.json 或 JSON-Java 是一個基於 Java 的簡單 JSON 工具包。您可以使用 org.json 編碼或解碼 JSON 資料。
功能
規範相容 − JSON.simple 完全符合 JSON 規範 - RFC4627。
輕量級 − 它只有很少的類,並提供必要的編碼/解碼和轉義 json 等功能。
XML 轉換 − 它提供 JSON 到 XML 和反之亦然的功能。
HTTP 頭部 − 支援 HTTP 頭部轉換為 JSON 以及反之。
Cookie − 提供將 Cookie 轉換為 JSON 以及反之的功能。
CDL − 提供將逗號分隔列表轉換為 JSON 以及反之的功能。
無依賴項 − 無外部庫依賴項。可以獨立包含。
Java 1.6-1.11 相容 − 原始碼和二進位制檔案與 Java 1.6-1.11 相容
org.json - 環境設定
本章將引導您完成在 Windows 和 Linux 系統上設定 Org.Json 的過程。Org.Json 可以輕鬆安裝並與您當前的 Java 環境整合,只需幾個簡單的步驟,無需任何複雜的設定過程。安裝時需要使用者管理許可權。
系統需求
| JDK | Java SE 2 JDK 1.5 或更高版本 |
|---|---|
| 記憶體 | 1 GB RAM(推薦) |
| 磁碟空間 | 無最低要求 |
| 作業系統版本 | Windows XP 或更高版本,Linux |
現在讓我們繼續執行安裝 Org.Json 的步驟。
步驟 1:驗證您的 Java 安裝
首先,您需要在系統上安裝 Java 軟體開發工具包 (SDK)。要驗證這一點,請根據您正在使用的平臺執行以下兩個命令之一。
如果 Java 安裝已正確完成,則它將顯示您 Java 安裝的當前版本和規範。下表給出了一個示例輸出。
| 平臺 | 命令 | 示例輸出 |
|---|---|---|
| Windows | 開啟命令控制檯並輸入 - \>java –version |
java version "11.0.11" 2021-04-20 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode) |
| Linux | 開啟命令終端並輸入 - $java –version |
java version "11.0.11" 2021-04-20 LTS Open JDK Runtime Environment 18.9 (build 11.0.11+9-LTS-194) Open JDK 64-Bit Server VM (build 11.0.11+9-LTS-194, mixed mode) |
我們假設本教程的讀者在其系統上安裝了 Java SDK 版本 11.0.11。
如果您沒有 Java SDK,請從 www.oracle.com/technetwork/java/javase/downloads/index.html 下載其當前版本並安裝。
步驟 2:設定您的 Java 環境
設定環境變數 JAVA_HOME 以指向 Java 安裝在您機器上的基本目錄位置。例如,
| 序號 | 平臺和描述 |
|---|---|
| 1 | Windows 將 JAVA_HOME 設定為 C:\ProgramFiles\java\jdk11.0.11 |
| 2 | Linux 匯出 JAVA_HOME = /usr/local/java-current |
將 Java 編譯器位置的完整路徑追加到系統路徑。
| 序號 | 平臺和描述 |
|---|---|
| 1 | Windows 將字串“C:\Program Files\Java\jdk11.0.11\bin”追加到系統變數 PATH 的末尾。 |
| 2 | Linux 匯出 PATH = $PATH:$JAVA_HOME/bin/ |
從命令提示符執行命令 java -version,如上所述。
步驟 3:安裝 Org.Json 庫
從 org.json @ MVNRepository 下載最新版本的 org.json jar 檔案。在撰寫本教程時,我們已下載 json-20211205,並將其複製到 C:\>JSON 資料夾中。
| 作業系統 | 存檔名稱 |
|---|---|
| Windows | json-20180813.jar |
| Linux | json-20180813.jar |
| Mac | json-20180813.jar |
步驟 4:設定 JSON_JAVA 環境
設定 JSON_JAVA 環境變數以指向 org.json jar 儲存在您機器上的基本目錄位置。假設我們將 json-20211205.jar 儲存在 JSON 資料夾中。
| 序號 | 作業系統和描述 |
|---|---|
| 1 | Windows 將環境變數 JSON_JAVA 設定為 C:\JSON |
| 2 | Linux 匯出 JSON_JAVA = /usr/local/JSON |
| 3 | Mac 匯出 JSON_JAVA = /Library/JSON |
步驟 5:設定 CLASSPATH 變數
設定 CLASSPATH 環境變數以指向 JSON.simple jar 的位置。
| 序號 | 作業系統和描述 |
|---|---|
| 1 | Windows 將環境變數 CLASSPATH 設定為 %CLASSPATH%;%JSON_JAVA%\json-20211205.jar;.; |
| 2 | Linux 匯出 CLASSPATH = $CLASSPATH:$JSON_JAVA/json-20211205.jar:. |
| 3 | Mac 匯出 CLASSPATH = $CLASSPATH:$JSON_JAVA/json-20211205.jar:. |
org.json - CDL
CDL 類提供靜態方法將逗號分隔文字轉換為 JSONArray,反之亦然。
以下方法在示例中介紹。
rowToJSONArray(String) − 將逗號分隔文字轉換為 JSONArray 物件。
rowToString(JSONArray) − 將 JSONArray 轉換為逗號分隔文字。
toJSONArray(String) − 將多行逗號分隔文字轉換為 JSONArray 物件的物件。
toJSONArray(JSONArray, String) − 將 JSONArray 物件和逗號分隔文字轉換為 JSONArray 物件。
示例
import org.json.CDL;
import org.json.JSONArray;
import org.json.JSONTokener;
public class JSONDemo {
public static void main(String[] args) {
String csvData = "INDIA, UK, USA";
//Case 1: CSV to JSON Array
JSONArray jsonArray = CDL.rowToJSONArray(new JSONTokener(csvData));
System.out.println(jsonArray);
//Case 2: JSONArray to CSV
System.out.println(CDL.rowToString(jsonArray));
//Case 3: CSV to JSONArray of Objects
csvData = "empId, name, age \n" +
"1, Mark, 22 \n" +
"2, Robert, 35 \n" +
"3, Julia, 18";
System.out.println(CDL.toJSONArray(csvData));
//Case 4: CSV without header
jsonArray = new JSONArray();
jsonArray.put("empId");
jsonArray.put("name");
jsonArray.put("age");
csvData = "1, Mark, 22 \n" + "2, Robert, 35 \n" + "3, Julia, 18";
System.out.println(CDL.toJSONArray(jsonArray,csvData));
}
}
輸出
["INDIA","UK","USA"]
INDIA,UK,USA
[{"name":"Mark","empId":"1","age":"22"},
{"name":"Robert","empId":"2","age":"35"},
{"name":"Julia","empId":"3","age":"18"}]
[{"name":"Mark","empId":"1","age":"22"},
{"name":"Robert","empId":"2","age":"35"},
{"name":"Julia","empId":"3","age":"18"}]
org.json - Cookie
Cookie 類提供靜態方法將 Web 瀏覽器的 Cookie 文字轉換為 JSONObject,反之亦然。
以下方法在示例中介紹。
toJSONObject(String) − 將 Cookie 文字轉換為 JSONObject 物件。
toString(JSONObject) − 將 JSONObject 轉換為 Cookie 文字。
示例
import org.json.Cookie;
import org.json.JSONObject;
public class JSONDemo {
public static void main(String[] args) {
String cookie = "username = Mark Den; expires = Thu, 15 Jun 2020 12:00:00 UTC; path = /";
//Case 1: Converts Cookie String to JSONObject
JSONObject jsonObject = Cookie.toJSONObject(cookie);
System.out.println(jsonObject);
//Case 2: Converts JSONObject to Cookie String
System.out.println(Cookie.toString(jsonObject));
}
}
輸出
{"path":"/","expires":"Thu, 15 Jun 2020 12:00:00 UTC","name":"username","value":"Mark Den"}
username=Mark Den;expires=Thu, 15 Jun 2020 12:00:00 UTC;path=/
org.json - CookieList
CookieList 類提供靜態方法將 Cookie 列表轉換為 JSONObject,反之亦然。Cookie 列表是名稱/值對的序列。
以下方法在示例中介紹。
toJSONObject(String) − 將 Cookie 列表文字轉換為 JSONObject 物件。
toString(JSONObject) − 將 JSONObject 轉換為 Cookie 列表文字。
示例
import org.json.Cookie;
import org.json.CookieList;
import org.json.JSONObject;
public class JSONDemo {
public static void main(String[] args) {
String cookie = "username = Mark Den; expires = Thu, 15 Jun 2020 12:00:00 UTC; path = /";
//Case 1: Converts Cookie String to JSONObject
JSONObject cookieJSONObject = Cookie.toJSONObject(cookie);
JSONObject cookielistJSONObject = new JSONObject();
cookielistJSONObject.put(cookieJSONObject.getString("name"),
cookieJSONObject.getString("value"));
String cookieList = CookieList.toString(cookielistJSONObject);
System.out.println(cookieList);
System.out.println(CookieList.toJSONObject(cookieList));
}
}
輸出
username=Mark Den
{"username":"Mark Den"}
org.json - HTTP
HTTP 類提供靜態方法將 Web 瀏覽器的標頭文字轉換為 JSONObject,反之亦然。
以下方法在示例中介紹。
toJSONObject(String) − 將標頭文字轉換為 JSONObject 物件。
toString(JSONObject) − 將 JSONObject 轉換為標頭文字。
示例
import org.json.HTTP;
import org.json.JSONObject;
public class JSONDemo {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("Method", "POST");
jsonObject.put("Request-URI", "https://tutorialspoint.tw/");
jsonObject.put("HTTP-Version", "HTTP/1.1");
//Case 1: Converts JSONObject of Header to String
String headerText = HTTP.toString(jsonObject);
System.out.println(headerText);
headerText = "POST \"https://tutorialspoint.tw/\" HTTP/1.1";
//Case 2: Converts Header String to JSONObject
System.out.println(HTTP.toJSONObject(headerText));
}
}
輸出
POST "https://tutorialspoint.tw/" HTTP/1.1
{"Request-URI":"https://tutorialspoint.tw/","Method":"POST","HTTP-Version":"HTTP/1.1"}
org.json - JSONArray
JSONArray 是值的排序序列。它提供按索引訪問值和放置值的方法。支援以下型別 -
布林值
JSONArray
JSONObject
數字
字串
JSONObject.NULL 物件
示例
import org.json.JSONArray;
import org.json.JSONObject;
public class JSONDemo {
public static void main(String[] args) {
JSONArray list = new JSONArray();
list.put("foo");
list.put(new Integer(100));
list.put(new Double(1000.21));
list.put(new Boolean(true));
list.put(JSONObject.NULL);
System.out.println("JSONArray: ");
System.out.println(list);
}
}
輸出
JSONArray: ["foo",100,1000.21,true,null]
org.json - JSONML
JSONML 類提供靜態方法將 XML 文字轉換為 JSONArray,反之亦然。
以下方法在示例中介紹。
toJSONArray(String) − 將 XML 轉換為 JSONArray 物件。
toJSONObject(String) − 將 XML 轉換為 JSONObject 物件。
toString(JSONArray) − 從 JSONArray 物件生成 XML。
toString(JSONObject) − 從 JSONObject 物件生成 XML。
示例
import org.json.JSONArray;
import org.json.JSONML;
import org.json.JSONObject;
public class JSONDemo {
public static void main(String[] args) {
JSONArray list = new JSONArray();
list.put("name");
list.put("Robert");
System.out.println("XML from a JSONArray: ");
String xml = JSONML.toString(list);
System.out.println(xml);
System.out.println("JSONArray from a XML: ");
list = JSONML.toJSONArray(xml);
System.out.println(list);
System.out.println("JSONObject from a XML: ");
JSONObject object = JSONML.toJSONObject(xml);
System.out.println(object);
System.out.println("XML from a JSONObject: ");
xml = JSONML.toString(object);
System.out.println(xml);
}
}
輸出
XML from a JSONArray:
<name>Robert</name>
JSONArray from a XML:
["name","Robert"]
JSONObject from a XML:
{"childNodes":["Robert"],"tagName":"name"}
XML from a JSONObject:
<name>Robert</name>
org.json - JSONObject
JSONObject 類是鍵值對的無序集合。它提供按鍵訪問值和放置值的方法。支援以下型別 -
布林值
JSONArray
JSONObject
數字
字串
JSONObject.NULL 物件
示例
import org.json.JSONArray;
import org.json.JSONObject;
public class JSONDemo {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("Name", "Robert");
jsonObject.put("ID", 1);
jsonObject.put("Fees", new Double(1000.21));
jsonObject.put("Active", new Boolean(true));
jsonObject.put("Other Details", JSONObject.NULL);
JSONArray list = new JSONArray();
list.put("foo");
list.put(new Integer(100));
jsonObject.put("list",list);
System.out.println(jsonObject);
}
}
輸出
{"Active":true,"Other Details":null,"ID":1,"Fees":1000.21,"list":["foo",100],"Name":"Robert"}
org.json - JSONStringer
JSONStringer 是一個實用程式類,用於快速構建符合 JSON 語法規則的 JSON 文字。每個 JSONStringer 例項可以生成一個 JSON 文字。
示例
import org.json.JSONStringer;
public class JSONDemo {
public static void main(String[] args) {
String jsonText = new JSONStringer()
.object()
.key("Name")
.value("Robert")
.endObject()
.toString();
System.out.println(jsonText);
jsonText = new JSONStringer()
.array()
.value("Robert")
.value("Julia")
.value("Dan")
.endArray()
.toString();
System.out.println(jsonText);
jsonText = new JSONStringer()
.array()
.value("Robert")
.value("Julia")
.value("Dan")
.object()
.key("Name")
.value("Robert")
.endObject()
.endArray()
.toString();
System.out.println(jsonText);
}
}
輸出
{"Name":"Robert"}
["Robert","Julia","Dan"]
["Robert","Julia","Dan",{"Name":"Robert"}]
org.json - 屬性
Property 類提供靜態方法將屬性文字轉換為 JSONObject,反之亦然。
以下方法在示例中介紹。
toJSONObject(Properties) − 將屬性資料轉換為 JSONObject 物件。
toProperties(JSONObject) − 將 JSONObject 轉換為屬性物件。
示例
import java.util.Properties;
import org.json.JSONObject;
import org.json.Property;
public class JSONDemo {
public static void main(String[] args) {
Properties properties = new Properties();
properties.put("title", "This is a title text");
properties.put("subtitle", "This is a subtitle text");
System.out.println("Properties to JSON");
JSONObject jsonObject = Property.toJSONObject(properties);
System.out.println(jsonObject);
System.out.println("JSON to properties");
System.out.println(Property.toProperties(jsonObject));
}
}
輸出
Properties to JSON
{"subtitle":"This is a subtitle text","title":"This is a title text"}
JSON to properties
{subtitle = This is a subtitle text, title = This is a title text}
org.json - XML
XML 類提供靜態方法將 XML 文字轉換為 JSONObject,反之亦然。
以下方法在示例中介紹。
toJSONObject(String) − 將 XML 轉換為 JSONArray 物件。
toString(JSONObject) − 從 JSONObject 物件生成 XML。
示例
import org.json.JSONObject;
import org.json.XML;
public class JSONDemo {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("Name", "Robert");
jsonObject.put("ID", 1);
jsonObject.put("Fees", new Double(1000.21));
jsonObject.put("Active", new Boolean(true));
jsonObject.put("Details", JSONObject.NULL);
//Convert a JSONObject to XML
String xmlText = XML.toString(jsonObject);
//Convert an XML to JSONObject
System.out.println(XML.toJSONObject(xmlText));
}
}
輸出
<Active>true</Active><Details>null</Details><ID>1</ID><Fees>1000.21</Fees><Name>Robert</Name>
{"Active":true,"Details":null,"ID":1,"Fees":1000.21,"Name":"Robert"}
org.json - JSONException 處理
org.json 的實用程式類在 JSON 無效時丟擲 JSONException。以下示例顯示如何處理 JSONException。
示例
import org.json.JSONException;
import org.json.XML;
public class JSONDemo {
public static void main(String[] args) {
try{
//XML tag name should not have space.
String xmlText = "<Other Details>null</Other Details>";
System.out.println(xmlText);
//Convert an XML to JSONObject
System.out.println(XML.toJSONObject(xmlText));
}
catch(JSONException e){
System.out.println(e.getMessage());
}
}
}
輸出
<Other Details>null</Other Details> Misshaped close tag at 34 [character 35 line 1]