Parshing
💡 파싱(Parsing)이란 컴퓨터 과학에서 입력된 데이터를 해석하고 구조화하는 과정을 의미합니다. 일반적으로 파싱은 텍스트 데이터를 특정 형식으로 변환하거나, 텍스트 데이터에서 유용한 정보를 추출하는 데 사용됩니다. 파싱을 통해 원시 데이터를 컴퓨터가 이해하고 처리할 수 있는 구조로 변환할 수 있습니다. |
파싱의 주요 개념
- 구문 분석(Syntax Analysis):
- 텍스트 데이터를 구문 규칙에 따라 해석하는 과정입니다.
- 주로 프로그래밍 언어의 컴파일러나 인터프리터에서 소스 코드를 구문 트리(Syntax Tree)로 변환할 때 사용됩니다.
- 데이터 형식 변환:
- 텍스트 데이터를 특정 형식(예: JSON, XML)으로 변환하여 구조화된 데이터를 생성합니다.
- 예를 들어, JSON 형식의 문자열을 자바 객체로 변환하거나, XML 데이터를 객체로 변환하는 과정이 포함됩니다.
- 정보 추출:
- 텍스트 데이터에서 유용한 정보를 추출하여 특정 목적에 맞게 사용하는 과정입니다.
- 예를 들어, 웹 페이지에서 특정 정보를 추출하는 웹 스크래핑(Web Scraping)이 포함됩니다.
JSON 파싱이란?
JSON(JavaScript Object Notation)은 경량 데이터 교환 형식으로, 자바스크립트 객체 표기법을 기반으로 합니다. JSON 파싱은 JSON 형식의 문자열을 프로그래밍 언어에서 사용할 수 있는 객체로 변환하는 과정입니다.
{
"name": "John Doe",
"age": 30,
"email": "johndoe@example.com"
}
배열(Array):
- 대괄호 [] 로 둘러싸인 값의 순서 있는 목록입니다.
- 각 값은 모든 JSON 데이터 타입이 될 수 있습니다.
[
"apple",
"banana",
"cherry"
]
문자열(String):
- 큰따옴표 ""로 둘러싸인 유니코드 문자입니다.
- 이스케이프 시퀀스(\n, \t, \" 등)를 지원합니다.
숫자(Number):
- 정수 또는 부동 소수점 숫자입니다.
- 10진수 형식만 지원하며, 8진수 및 16진수는 지원하지 않습니다.
불리언(Boolean):
- true 또는 false 값을 가집니다.
널(Null):
- null 값을 가집니다.
Json Array 형식 예시
[
{
"name": "John Doe",
"age": 30,
"isStudent": false
},
{
"name": "John Doe",
"age": 30,
"isStudent": false
}
]
Json Object 형식에 예시
{
"name": "John Doe",
"age": 30,
"isStudent": false,
"scores": [95, 87, 92],
"address": {
"street": "123 Main St",
"city": "Anytown",
"zip": "12345"
},
"courses": [
{
"name": "Math",
"grade": "A"
},
{
"name": "English",
"grade": "B"
}
],
"graduationYear": null
}
필요한 라이브러리 추가
JSON 파싱을 위해 GSON 라이브러를 추가 합니다. (빌드 도구를 사용하지 않는 경우, 직접 JAR 파일을 다운로드하고 프로젝트에 추가해야 합니다.)
package ch01;
import com.google.gson.Gson;
public class MainTest1 {
public static void main(String[] args) {
// Gson <-- 현재 사용 불가
// lib 폴더에 Gson 라이브러리 추가
// 우리 소스 코드상에 사용하기 위해 설정이 필요 하다.
// 프로젝트 속성에서 빌드패스 들어가서 클래스 패스에 add jars 등록
Gson gson = new Gson();
gson.fieldNamingStrategy();
} // end of main
} // end of class
라이브러리 추가 방법
자바 코드에서 JSON 형식에 문자열 만들어 보기
- 직접 문자열을 가공해서 만들어 주면 된다.
- Gson lib 를 이용해서 편하게 만들 수 있다.
{
"name": "홍길동",
"age": 21,
"subjects": ["수학", "물리", "컴퓨터 과학"]
}
package ch01;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonExample {
public static void main(String[] args) {
//
Student student1 = new Student("고길동", 40, "애완학과");
Student student2 = new Student("둘리", 5, "파괴학과");
//
Student[] studentArr = { student1, student2 };
// --> 특정 형식(구조화) 있는 문자열로 변환하고 싶다. --> Json 형태
// Gson gson = new Gson();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
// 객체를 --> Json 형식에 문자열로 변환 시켜 ! --> 메서드 toJson()
String student1Str = gson.toJson(student1);
System.out.println(student1Str);
// setPrettyPrinting() -> 이쁘게 출력하라 옵션
Gson gson2 = new Gson();
String student2Str = gson2.toJson(student2);
System.out.println(student2Str);
// 객체에서 ---> 문자열 형태로 가능 그럼 반대로는 어떻게 하지??
// 문자열에서 ---> 클래스 형태로 어떻게 변경할까?
// Object 형태로 변환
Student studentObject = gson.fromJson(student1Str, Student.class);
System.out.println(studentObject.getName());
// 배열 형태로 변환
Student[] StringArr = gson.fromJson(gson.toJson(studentArr), Student[].class);
System.err.println(StringArr);
for (Student student : StringArr) {
System.err.println(student.toString());
}
System.out.println("-----------------------------");
System.out.println(gson.toJson(StringArr));
System.out.println("Student 끝");
////////////////////////// dog로 다시 해보기
Dog dog1 = new Dog("고출력", 12);
Dog dog2 = new Dog("저출력", 5);
Dog [] dogArr = {dog1, dog2};
Gson dogGson1 = new GsonBuilder().setPrettyPrinting().create();
String dog1Str = dogGson1.toJson(dog1);
System.out.println(dog1Str);
Gson dogGson2 = new Gson();
String dog2Str = dogGson2.toJson(dog2);
System.out.println(dog2Str);
Dog dogObject = dogGson1.fromJson(dog1Str, Dog.class);
System.out.println(dogObject.getName());
Dog[] strDogArr = dogGson1.fromJson(dogGson1.toJson(dogArr), Dog[].class);
System.out.println(dogArr + "주소값나옴");
for(Dog dog : dogArr) {
System.out.println(dog.toString());
}
System.out.println("----------------");
System.out.println(dogGson1.toJson(dogArr));
System.out.println("dog의 끝");
}
}
추가 문제
문제 1
[
{
"name": "홍길동"
"age" : 20,
"address" : "부산"
},
{
"name": "이순신"
"age" : 33,
"address" : "서울"
},
{
"name": "세종대왕"
"age" : 59,
"address" : "세종시"
}
]
문제 2
{
"todoList" : [
{
"id" : 1,
"title" : "청소",
"complete" : false
},
{
"id" : 2,
"title" : "영어공부"
"complete" : true
},
],
"server_name" : "server_1"
}
/**
*
*
[
{
"name": "홍길동"
"age" : 20,
"address" : "부산"
},
{
"name": "이순신"
"age" : 33,
"address" : "서울"
},
{
"name": "세종대왕"
"age" : 59,
"address" : "세종시"
}
]
*
*/
'Java > JAVA 3 - 유용한 클래스' 카테고리의 다른 글
JSON 파싱 연습 2단계 - 32 (1) | 2024.06.07 |
---|---|
공공 데이터 포탈 사용해 보기 - 30 (0) | 2024.06.04 |
순수 자바코드로 HttpServer 만들기 - 29 (2) | 2024.06.03 |
소켓을 활용한 HTTP 통신이란 - 28 (1) | 2024.06.03 |
제네릭(Generic) - 27 (1) | 2024.06.03 |