[Java] JSON의 Key를 파싱하고 Value를 파일로 저장하는 방법.

2024. 11. 2. 21:41Language/java

728x90
728x90

JSON(JavaScript Object Notation) ?

  • 키-값 쌍으로 표현하는 데이터 형식.
  • 일반적으로 서버와 클라이언트 간 데이터 교환에 사용.

JSON 형식 예시.

{
  "name": "gomu92",
  "age": 25,
}

HTTP Request, Response 거래 도식.

JSON 파싱을 위해서 사용한 라이브러리.

JSON Key를 파싱하고 Key의 Value를 파일로 저장하는 코드.

  • getAuthorization.java

코드 설명.

  • Application은 HTTP 응답을 받은 후에 호출된다.
  • HTTP Response Data(JSON)는 outputDocument 인자에 byte[] 형식으로 저장된다.
  • jsonObject에서 access_token 필드를 찾고 해당 필드의 Value를 파일로 저장한다.
$ cat getAuthorization.java
import org.apache.commons.httpclient.HttpMethodBase;
import anylink.common.base.RespHttpUserHandler;
import org.json.JSONObject;

import java.io.FileWriter;
import java.io.IOException;

public class getAuthorization extends RespHttpUserHandler {

    public byte[] setResponseByte(HttpMethodBase method, byte[] outputDocument) {
        try {
            // byte를 String으로 변환.
            String jsonString = new String(outputDocument);
            // JSON 파싱
            JSONObject jsonObject = new JSONObject(jsonString);
            // access_token 필드가 존재하는지 확인
            if (jsonObject.has("access_token")) {
                // access_token 필드의 value를 추출
                String accessToken = jsonObject.getString("access_token");
                // access_token 필드의 값을 파일로 저장
                saveAccessTokenToFile(accessToken, "/home/tmax/batfile/oauth_sftpc/access_token");
            } else {
                System.out.println("not exist access_token field.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return outputDocument;
    }

    private void saveAccessTokenToFile(String accessToken, String filePath) {
        try (FileWriter fileWriter = new FileWriter(filePath)) {
            fileWriter.write(accessToken);
            System.out.println("Access token saved to " + filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Java 컴파일.

$ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

$ javac -classpath json-20210307.jar:al4-core.jar:commons-httpclient-3.0.1.jar getAuthorization.java

HTTP Server Request, Response Log.(Flask)

---------------------------------------
Current function : oauth_2_token
---------------------------------------
---------------------------------------
Current Server Time : 2024-10-17 14:50:43
---------------------------------------
---------------------------------------
HTTP Protocol Version : HTTP/1.1
---------------------------------------
---------------------------------------
GET HTTP Header
Content-Type : application/x-www-form-urlencoded; charset=UTF-8
User-Agent : Jakarta Commons-HttpClient/3.0.1
Host : 192.168.115.34:28888
Content-Length : 127
---------------------------------------
---------------------------------------
GET HTTP Body
client_id=c4dd87f8-0dc8-4adf-b7b0-935c79c1448e&client_secret=d2178977-9efb-4141-b1ff-9443a3795dca&grant_type=client_credentials
---------------------------------------
---------------------------------------
PUT HTTP Body
{
	'access_token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJGMDAxMjM0NTYwIiwic2NvcGUiOlsib29iIl0sImlzcyI6Imh0dHBzOi8vd3d3Lm9wZW5iYW5raW5nLm9yLmtyIiwiZXhwIjoiMTU3Njk3OTEzMyIsImp0aSI601NWEzMTc5LTEwMjYtNzZjNC05YzExLWQxNTZhOTcxMmRiZiJ9.miMnaiKpzXHTJr3JPlUd2amPpeXiqOM8XnRyX6c62Vs', 
	'token_type': 'Bearer', 
	'expires_in': 7776000
}
---------------------------------------
---------------------------------------
End Processing
---------------------------------------
192.168.15.56 - - [17/Oct/2024 14:50:43] "POST /oauth/2.0/token HTTP/1.1" 200 -

Application에서 저장한 파일(access_token 필드의 값)을 확인.

$ cat /home/tmax/batfile/oauth_sftpc/access_token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJGMDAxMjM0NTYwIiwic2NvcGUiOlsib29iIl0sImlzcyI6Imh0dHBzOi8vd3d3Lm9wZW5iYW5raW5nLm9yLmtyIiwiZXhwIjoiMTU3Njk3OTEzMyIsImp0aSI601NWEzMTc5LTEwMjYtNzZjNC05YzExLWQxNTZhOTcxMmRiZiJ9.miMnaiKpzXHTJr3JPlUd2amPpeXiqOM8XnRyX6c62Vs
728x90
728x90