ในบทช่วยสอนนี้ เราจะมาดูวิธีแยก JSON ใน Java โดยใช้ไลบรารีต่างๆ
JSON ย่อมาจาก JavaScript Object Notation และอิงตามชุดย่อยของ JavaScript
เป็นรูปแบบการแลกเปลี่ยนข้อมูล มีการใช้กันอย่างแพร่หลายในการเขียนโปรแกรมเว็บ ที่นี่เราจะแสดงวิธีแยก JSON ใน Java โดยใช้ org.json
ห้องสมุด
ออบเจ็กต์ JSON คือชุดของคู่คีย์/ค่าที่ไม่เรียงลำดับ อาร์เรย์ JSON คือชุดของค่าที่เรียงลำดับ ค่าเหล่านี้อาจเป็นออบเจ็กต์หรืออาร์เรย์
เราจะแยกวิเคราะห์ JSON นี้เป็นตัวอย่างเพื่อดึงค่าสำหรับ pageName
, pagePic
และ post_id
{
"pageInfo": {
"pageName": "Homepage",
"logo": "https://www.example.com/logo.jpg"
},
"posts": [
{
"post_id": "0123456789",
"actor_id": "1001",
"author_name": "Jane Doe",
"post_title": "How to parse JSON in Java",
"comments": [],
"time_of_post": "1234567890"
}
]
}
แยกวิเคราะห์ JSON โดยใช้ org.json
ในการใช้ org.json เพื่อแยก JSON ใน Java คุณต้องเพิ่มไลบรารีเป็นการพึ่งพา สามารถดึงข้อมูลจากที่เก็บ Maven
import org.json.JSONArray;
import org.json.JSONObject;
public class ParseJSON {
static String json = "...";
public static void main(String[] args) {
JSONObject obj = new JSONObject(json);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");
System.out.println(pageName);
JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++) {
String post_id = arr.getJSONObject(i).getString("post_id");
System.out.println(post_id);
}
}
}
เอ็นบี ...
ต้องถูกแทนที่ด้วยสตริง JSON สิ่งนี้ถูกละเว้นจากโค้ดด้านบนเพื่อความชัดเจน
ขั้นแรก เราต้องแปลงสตริง JSON เป็น JSON Object โดยใช้คลาส JSONObject
นอกจากนี้ โปรดทราบว่า “pageInfo” เป็นออบเจ็กต์ JSON ดังนั้นเราจึงใช้วิธี getJSONObject
ในทำนองเดียวกัน “โพสต์” เป็นอาร์เรย์ JSON ดังนั้นเราจึงต้องใช้เมธอด getJSONArray
ที่เกี่ยวข้อง:
- วิธีการแปลง Java Object เป็น JSON
- วิธีการแปลง Java Map เป็น JSON
- วิธีเข้ารหัสและถอดรหัส JSON
แยกวิเคราะห์ JSON โดยใช้ Gson
ในการใช้ Gson เพื่อแยกวิเคราะห์ JSON ใน Java คุณต้องเพิ่มไลบรารีเป็นการพึ่งพา คุณสามารถรับเวอร์ชันล่าสุดได้จากที่เก็บ Maven
ตัวอย่างด้านล่างแสดงวิธีแยก JSON ด้านบนด้วย Gson
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class ParseJSON {
static String json = "...";
public static void main(String[] args) {
JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
String pageName = jsonObject.getAsJsonObject("pageInfo").get("pageName").getAsString();
System.out.println(pageName);
JsonArray arr = jsonObject.getAsJsonArray("posts");
for (int i = 0; i < arr.size(); i++) {
String post_id = arr.get(i).getAsJsonObject().get("post_id").getAsString();
System.out.println(post_id);
}
}
}
เช่นเดียวกับตัวอย่างก่อนหน้านี้ ...
ต้องแทนที่ด้วยสตริง JSON
แยกวิเคราะห์ JSON โดยใช้ JsonPATH
ตัวอย่าง 2 ตัวอย่างข้างต้นต้องการการดีซีเรียลไลซ์เซชันของ JSON อย่างสมบูรณ์ในออบเจ็กต์ Java ก่อนเข้าถึงค่าในคุณสมบัติที่สนใจ อีกทางเลือกหนึ่งที่ไม่ไปเส้นทางนี้คือการใช้ JsonPATH ซึ่งเหมือนกับ XPath สำหรับ JSON และอนุญาตให้สำรวจวัตถุ JSON ได้
เช่นเคย คุณต้องเพิ่ม JsonPATH เป็นการพึ่งพา ซึ่งสามารถดึงมาจากที่เก็บ Maven
ตัวอย่างเช่น ในการแยกวิเคราะห์ JSON ด้านบน เราสามารถใช้:
import com.jayway.jsonpath.JsonPath;
public class ParseJSON {
static String json = "...";
public static void main(String[] args) {
String pageName = JsonPath.read(json, "$.pageInfo.pageName");
System.out.println(pageName);
Integer posts = JsonPath.read(json, "$.posts.length()");
for(int i=0; i < posts; i++) {
String post_id = JsonPath.read(json, "$.posts[" + i + "].post_id");
System.out.println(post_id);
}
}
}