在 Java 中解析 JSON
-
在 Java 中使用
json.simple
庫解析 JSON -
在 Java 中使用
org.json
庫解析 JSON -
在 Java 中使用
gson
庫解析 JSON -
在 Java 中使用
JsonPath
庫解析 JSON
JSON 是一種輕量級的基於文字的語言,用於儲存和傳輸資料。它基於 JavaScript 中的物件。JSON 表示兩種結構化型別,即物件和陣列。
本教程演示瞭如何使用各種方法在 Java 中解析 JSON。
對於我們的示例,我們將使用以下 JSON 檔案。
{
"firstName": "Ram",
"lastName": "Sharma",
"age": 26
},
"phoneNumbers": [
{
"type": "home",
"phone-number": "212 888-2365"
}
]
}
在 Java 中使用 json.simple
庫解析 JSON
第一種方法是使用 json.simple
庫在 Java 中解析 JSON。我們必須從 java.simple
庫中匯入兩個類,org.json.simple.JSONArray
和 org.json.simple.JSONObject
。
JSONArray
幫助我們解析陣列形式的元素,而 JSONObject
允許我們解析 JSON 文字中存在的物件。
以下示例演示了此方法的使用。
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;
public class JSONsimple {
public static void main(String[] args) throws Exception {
// parsing file "JSONExample.json"
Object ob = new JSONParser().parse(new FileReader("JSONFile.json"));
// typecasting ob to JSONObject
JSONObject js = (JSONObject) ob;
String firstName = (String) js.get("firstName");
String lastName = (String) js.get("lastName");
System.out.println("First name is: " + firstName);
System.out.println("Last name is: " + lastName);
}
}
輸出:
First name is: Ram
Ladt name is: Sharma
在上面的示例中,我們讀取了系統上已有的 JSON 檔案,並從中列印了該檔案中的名字和姓氏屬性。
此處,org.json.simple.parser.*
中的 JSONParser().parse()
函式解析檔案中的 JSON 文字。此處的 js.get()
方法從檔案中獲取 firstName
和 lastName
的值。
在 Java 中使用 org.json
庫解析 JSON
該庫提供了一種直接讀取 JSON 字串而不是從檔案中讀取的靜態方法。getJSONObject
和 getJSONArray
方法使工作更加簡單,並從使用者輸入的字串中為我們提供所需的輸入。此外,我們不必像前面的示例中那樣將物件型別轉換為 JSONObject
。
請參考下面的程式碼。
import org.json.JSONArray;
import org.json.JSONObject;
public class JSON2 {
static String json = "{\"contacDetails\": {\n" + // JSON text is written here
" \"firstName\": \"Ram\",\n"
+ " \"lastName\": \"Sharma\"\n"
+ " },\n"
+ " \"phoneNumbers\": [\n"
+ " {\n"
+ " \"type\": \"home\",\n"
+ " \"phone-number\": \"212 888-2365\",\n"
+ " }\n"
+ " ]"
+ "}";
public static void main(String[] args) {
// Make a object
JSONObject ob = new JSONObject(json);
// getting first and last name
String firstName = ob.getJSONObject("contacDetails").getString("firstName");
String lastName = ob.getJSONObject("contacDetails").getString("lastName");
System.out.println("FirstName " + firstName);
System.out.println("LastName " + lastName);
// loop for printing the array as phoneNumber is stored as array.
JSONArray arr = obj.getJSONArray("phoneNumbers");
for (int i = 0; i < arr.length(); i++) {
String post_id = arr.getJSONObject(i).getString("phone-number");
System.out.println(post_id);
}
}
}
輸出:
FirstName Ram
LastName Sharma
212 888-2365
在 Java 中使用 gson
庫解析 JSON
這個庫也需要另外下載。我們必須從 gson
庫中匯入三個類,分別是 com.google.gson.JsonArray
、com.google.gson.JsonObject
和 com.google.gson.JsonParser
。
我們可以使用靜態字串和檔案來解析 JSON。獲取輸入的方法名稱與前一個略有不同。為了獲取物件資料,我們將使用 getAsJsonObject()
,對於陣列輸入,我們將使用 getAsJsonArray()
。
請參考下面的程式碼。
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class GsonMethod {
static String json = "{\"contacDetails\": {\n" + // JSON text is written here
" \"firstName\": \"Ram\",\n"
+ " \"lastName\": \"Sharma\"\n"
+ " },\n"
+ " \"phoneNumbers\": [\n"
+ " {\n"
+ " \"type\": \"home\",\n"
+ " \"phone-number\": \"212 888-2365\",\n"
+ " }\n"
+ " ]"
+ "}";
public static void main(String[] args) {
// Make an object
JsonObject ob = new JsonParser().parse(json).getAsJsonObject();
// getting first and last name
String firstName = ob.getAsJsonObject("contacDetails").get("firstName");
String lastName = ob.getAsJsonObject("contacDetails").get("lastName");
System.out.println("FirstName " + firstName);
System.out.println("LastName " + lastName);
// loop for printing the array as phoneNumber is stored as array.
JsonArray arr = obj.getAsJsonArray("phoneNumbers");
for (int i = 0; i < arr.length(); i++) {
String PhoneNumber = arr.getAsJsonObject(i).get("phone-number");
System.out.println(PhoneNumber);
}
}
}
輸出:
FirstName Ram
LastName Sharma
212 888-2365
在 Java 中使用 JsonPath
庫解析 JSON
在這個庫中,我們將使用 read()
方法來獲取資料輸入。我們不需要在這裡建立一個物件來呼叫 JSON 文字。我們將為此匯入 com.jayway.jsonpath.JsonPath
類。
以下示例演示了此方法。
import com.jayway.jsonpath.JsonPath;
public class PathMethod {
static String json = "{\"contacDetails\": {\n" + // JSON text is written here
" \"firstName\": \"Ram\",\n"
+ " \"lastName\": \"Sharma\"\n"
+ " },\n"
+ " \"phoneNumbers\": [\n"
+ " {\n"
+ " \"type\": \"home\",\n"
+ " \"phone-number\": \"212 888-2365\",\n"
+ " }\n"
+ " ]"
+ "}";
public static void main(String[] args) {
// getting input
String firstName = JsonPath.read(json, "$.contactDetails.firstName");
System.out.println("FirstName " + firstName);
String lastName = JsonPath.read(json, "$.contactDetails.lastName");
System.out.println("LastName " + lastName);
Integer phoneNumbers = JsonPath.read(json, "$.phoneNumbers.length()");
for (int i = 0; i < phoneNumbers; i++) {
String number = JsonPath.read(json, "$.phoneNumber[" + i + "].phone-number");
System.out.println(number);
}
}
}
輸出:
FirstName Ram
LastName Sharma
212 888-2365