HOWTO · Java

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