JSON (JavaScript Object Notation) 是輕量級資料交換格式,結構簡單、易讀寫、機器解析高效。兩大核心結構:
{ "key": "value", ... } (對應 Java Map/JSONObject)[ "value1", "value2", ... ] (對應 Java List/JSONArray)值類型:字串、數字、布林、null、物件、陣列 (可巢狀)。
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20231013</version>
</dependency>
核心類別:JSONObject、JSONArray、JSONStringer、JSONTokener。
String json = "{\"name\":\"xiazdong\",\"age\":20}";
JSONObject obj = new JSONObject(json);
String name = obj.getString("name"); // "xiazdong"
int age = obj.getInt("age"); // 20
String json = "[{\"name\":\"A\",\"age\":20},{\"name\":\"B\",\"age\":15}]";
JSONArray arr = new JSONArray(json);
for (int i = 0; i < arr.length(); i++) {
JSONObject item = arr.getJSONObject(i);
System.out.println(item.getString("name") + ":" + item.getInt("age"));
}
String json = "{\"name\":\"xiazdong\",\"books\":[\"book1\",\"book2\"]}";
JSONObject obj = new JSONObject(json);
String firstBook = obj.getJSONArray("books").getString(0); // "book1"
JSONStringer js = new JSONStringer();
String json = js.object()
.key("name").value("xiazdong")
.key("age").value(20)
.endObject()
.toString();
// 產生: {"name":"xiazdong","age":20}
JSONStringer js = new JSONStringer();
JSONObject section = new JSONObject();
section.put("title", "BOOK");
JSONArray signings = new JSONArray();
// signing 1
JSONObject s1 = new JSONObject();
s1.put("author", new JSONObject().put("name", "author-1"));
s1.put("book", new JSONObject().put("title", "book1").put("price", "$11"));
// signing 2
JSONObject s2 = new JSONObject();
s2.put("author", new JSONObject().put("name", "author-2"));
s2.put("book", new JSONObject().put("title", "book2").put("price", "$22"));
signings.put(s1).put(s2);
section.put("signing", signings);
js.object().key("section").value(section).endObject();
try (PrintWriter out = new PrintWriter("output.json")) {
out.println(js.toString());
}
// 讀取 JSONObject
JSONObject obj = new JSONObject(new JSONTokener(new FileReader("data.json")));
// 讀取 JSONArray
JSONArray arr = new JSONArray(new JSONTokener(new FileReader("data.json")));
// 巢狀存取範例
String author = obj.getJSONObject("section")
.getJSONArray("signing")
.getJSONObject(0)
.getJSONObject("author")
.getString("name");
JSONObject 的 put 方法支援鏈式呼叫 (obj.put("a",1).put("b",2))。org.json 庫輕量、零依賴、API 直觀,適合快速原型、簡單配置檔處理、Android 早期專案。掌握 JSONObject/JSONArray 解析、JSONStringer 建構、JSONTokener 檔案讀寫四大核心操作,即可應付絕大多數 JSON 處理場景。