[Java] JSON의 Key를 파싱하고 Value를 파일로 저장하는 방법.
2024. 11. 2. 21:41ㆍLanguage/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
'Language > java' 카테고리의 다른 글
[Java] 파일의 값을 HTTP Header로 설정하는 방법. (0) | 2024.11.08 |
---|---|
[Java] jar 파일에 포함된 외부 라이브러리를 제거하는 방법. (0) | 2024.09.27 |
[java] 대칭 키(AES) 알고리즘을 사용해서 데이터를 Base64 방식으로 인코딩/디코딩하는 방법. (0) | 2022.11.16 |
[java] JSch 라이브러리 & DH 알고리즘 사용하여, java sftp client 환경 구축하는 방법.(*.java, sftp client code) (0) | 2022.03.25 |
[java] HTTP POST body data를 송/수신하는 서블릿 코드.(*.java, servlet code) (0) | 2022.02.14 |