在 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