Java에서 JSON 구문 분석

Siddharth Swami 2023년10월12일
  1. json.simple 라이브러리를 사용하여 Java에서 JSON 구문 분석
  2. org.json 라이브러리를 사용하여 Java에서 JSON 구문 분석
  3. gson 라이브러리를 사용하여 Java에서 JSON 구문 분석
  4. JsonPath 라이브러리를 사용하여 Java에서 JSON 구문 분석
Java에서 JSON 구문 분석

JSON은 데이터를 저장하고 전송하기 위한 가벼운 텍스트 기반 언어입니다. JavaScript의 객체를 기반으로 합니다. JSON은 객체와 배열인 두 가지 구조화된 유형을 나타냅니다.

이 튜토리얼은 다양한 방법을 사용하여 Java에서 JSON을 구문 분석하는 방법을 보여줍니다.

예제에서는 다음 JSON 파일로 작업합니다.

{
    "firstName": "Ram",
    "lastName": "Sharma",
    "age": 26
    },

    "phoneNumbers": [
        {
            "type": "home",
            "phone-number": "212 888-2365"
        }
    ] 
}

json.simple 라이브러리를 사용하여 Java에서 JSON 구문 분석

첫 번째 방법은 json.simple 라이브러리를 사용하여 Java에서 JSON을 구문 분석하는 것입니다. java.simple 라이브러리에서 org.json.simple.JSONArrayorg.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() 메소드는 파일에서 firstNamelastName에 대한 값을 가져옵니다.

org.json 라이브러리를 사용하여 Java에서 JSON 구문 분석

이 라이브러리는 파일에서 읽는 대신 JSON 문자열을 직접 읽는 정적 메서드를 제공합니다. getJSONObjectgetJSONArray 메소드는 작업을 더 단순하게 만들고 사용자가 입력한 문자열에서 필요한 입력을 제공합니다. 또한 이전 예제에서와 같이 객체를 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

gson 라이브러리를 사용하여 Java에서 JSON 구문 분석

이 라이브러리도 추가로 다운로드해야 합니다. gson 라이브러리에서 com.google.gson.JsonArray, com.google.gson.JsonObjectcom.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

JsonPath 라이브러리를 사용하여 Java에서 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

관련 문장 - Java JSON