프로그래밍 공부

2025.03.19 스프링 공부

3452 2025. 3. 19. 17:53

JSON

 

JSON은 데이터 교환을 위한 경량의 데이터 교환 형식이다.

 

 

데이터 구조

  • 키-값 쌍으로 구성된 객체 형태이다.
  • 배열, 숫자, 문자열, 불리언, null등의 데이터 타입을 지원한다.

간단한 구문

  • JSON은 중괄호{}로 객체를 나타내고 []로 배열을 나타낸다.
  • 키와 값은 콜론 : 으로 구분되며, 각 키-값 쌍은 쉼표 , 로 구분된다.

언어의 독립성

  • 언어의 독립적인 데이터 형식이므로, 다양한 프로그래밍 언어에서 사용할 수 있다.
  • 대부분 프로그래밍 언어에는 JSON 데이터를 읽고 쓰는 라이브러리를 제공한다.

데이터 전송

  • HTTP 요청의 페이로드로 사용되어 클라이언트-서버간 데이터 전송에 활용된다.
  • API 응답 데이터, 설정 파일, 데이터베이스 데이터 등을 JSON으로 표현할 수 있다.

 

자바에서 JSON 생성하기

 

@GetMapping("/createjson")

public String createjson(Model model) {

JSONObject book1 = new JSONObject(); // { } {"key" : "value"}

book1.put("title", "스프링1"); // {"title" : "스프링1"}

book1.put("price", 10000); // {"title" : "스프링1", "price" : 10000}

book1.put("page", 100); // {"title" : "스프링1", "price" : 10000, "page" : 100}

System.out.println(book1.toString());

 

JSONObject book2 = new JSONObject(); // { } {"key" : "value"}

book2.put("title", "스프링2"); // {"title" : "스프링2"}

book2.put("price", 20000); // {"title" : "스프링2", "price" : 20000}

book2.put("page", 200); // {"title" : "스프링2", "price" : 20000, "page" : 200}

System.out.println(book2.toString());

 

JSONArray books = new JSONArray();

books.put(book1);

books.put(book2);

System.out.println(books.toString());

 

return "ajax";

}

 

JSONObject는 자바에서 JSON 파일을 만들때 객체, 중괄호 {}에 해당한다.

 

위의 코드에서 book1과 book2를 JSON의 객체로 만든 다음에 put(키,값)을 이용해서 객체 안에 데이터를 집어넣는다.

 

JSONArray는 안에 book1 객체와 book2 객체를 담은 배열이다.

 

정리하면 JSON에서 객체 {}는 JSONObject로, 배열 []은 JSONArray로 나타낸다.

 

 


 

더보기

public class book {

private String title;

private int price;

private String company;

private int page;

 

 

public book() {}

public book(String title, int price, String company, int page) {

this.title = title;

this.price = price;

this.company = company;

this.page = page;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

public String getCompany() {

return company;

}

public void setCompany(String company) {

this.company = company;

}

public int getPage() {

return page;

}

public void setPage(int page) {

this.page = page;

}

@Override

public String toString() {

return "book [title=" + title + ", price=" + price + ", company=" + company + ", page=" + page + "]";

}

 

 

}

DTO 객체 book.java

 


DTO 객체를 JSON으로 변환하기

 

@GetMapping("/DTJ")

public String DTOtoJSON() {

book dto = new book("자바", 21000, "가나다라", 670);

gson = new Gson();

json = gson.toJson(dto);

System.out.println(json);

 

return "ajax";

}

 

구글에서 지원하는 라이브러리인 Gson을 이용하면 쉽게 변환할수 있다.

 

DTO 객체에서 JSON으로 변환하기 위해서 먼저 DTO 객체를 생성한다.

 

생성된 DTO 객체를 Gson() 라이브러리를 이용해서 toJson(dto)를 이용해 json으로 변환한다.

 

변환된 json을 출력해본다.


JSON 파일을 DTO로 변환하기

@GetMapping("/JTD")

public String JSONtoDTO() {

gson = new Gson();

book newdto = gson.fromJson(json, book.class);

System.out.println(newdto.toString());

 

return "ajax";

}

 

 

DTO객체를 생성할때 gson라이브러리 안에 fromJson()함수를 이용해서 json에 있는 내용을 book 객체에 매핑해서 데이터를 json 형식에서 book 객체로 바꿔준다.

 

그후 toString()을 이용해 출력하면 book 객체에 있던 toString에 의해 키=값 형태로 변환된 값을 출력한다.

 

 


 

 

ArrayList를 JSON으로 변환하기

 

@GetMapping("/ATJ")

public String ArrToJson() {

gson = new Gson();

ArrayList<book> arr = new ArrayList<book>();

book dto1 = new book("자바", 21000, "가나다라", 671);

book dto2 = new book("자바", 21000, "가나다라", 672);

book dto3 = new book("자바", 21000, "가나다라", 673);

arr.add(dto1);

arr.add(dto2);

arr.add(dto3);

System.out.println("ArrayList 출력");

System.out.println(arr.toString());

System.out.println("------------------------");

//[book [title=자바, price=21000, company=가나다라, page=671], book [title=자바, price=21000, company= 가나다라 , page=672], book [title=자바, price=21000, company= 가나다라 , page=673]]

 

String listjson = gson.toJson(arr);

System.out.println(listjson);

//[{"title":"자바","price":21000,"company":" 가나다라 ","page":671},{"title":"자바","price":21000,"company":" 가나다라 ","page":672},{"title":"자바","price":21000,"company":" 가나다라 ","page":673}]

JTA(listjson);

return "ajax";

}

 

어레이리스트를 JSON으로 바꾸기 위해서 객체생성하고, 안에 넣을 dto객체를 생성해서 어레이리스트에 채워준다.

 

그후 어레이리스트에 담긴 객체를 확인하기 위해서 toString()으로 출력시킨다.

 

DTO때와 마찬가지로 gson() 라이브러리를 위해 변환시키고 출력해본다.

 


 

JSON에서 ArrayList로 변환하기

public void JTA(String json) {

ArrayList<book> list = gson.fromJson(json, new TypeToken <ArrayList<book>>(){}.getType());

System.out.println(list);

 

}

 

위의 코드를 그대로 가져와서 변환만 시킨다.

 

어레이리스트를 생성할때 DTO와 마찬가지로 fromJson() 함수를 사용하지만 타입토큰을 이용해서 어레이리스트 타입의 book타입의 객체에서 타입을 가져와 생성하기 때문에 제네릭 표현을 2번 사용한다.

 

많이 쓰이는 방식은 아니다.

 


 

공공데이터 API 이용하기

 

1. data.go.kr 에 접속해서 회원가입 및 로그인한다.

2. 원하는 데이터를 선택하고 활용신청한 후 일반 인증키를 복사한다.

3. 활용신청 상세기능정보에서 미리보기 탭에 확인을 누른다.

4. ServiceKey에 부여받은 일반 인증키를 복사해서 붙여넣고, type은 json으로 바꾼 후 미리보기를 누른다.

5. 제공된 json 파일을 json viewer에 넣어서 json 파일 구조를 확인한다.

 

이렇게 조회한 json 파일은 객체 안에 객체, 배열, 데이터가 함께 있는데

 

 

맨 처음에는 JSONTokener tokener = new JSONTokener(json을 담은변수.toString());를 이용해서 토큰을 객체생성한다.

 

그 다음부터는 객체면 JSONObject, 배열이면 JSONArray을 이용해서 get("키") 메서드로 필요한 값을 빼낼수 있다.

 

JSONTokener tokener = new JSONTokener(sb.toString());

JSONObject obj = new JSONObject(tokener);

//System.out.println(obj.get("status"));

 

//JSONObject meta = obj.getJSONObject("meta");

//System.out.println(meta.get("page"));

JSONArray arr = obj.getJSONArray("addresses");

예시코드

 

tokener를 먼저 생성하고 토크너로 객체에 접근하는 obj를 생성하고, obj.get("status")를 이용해 status 키 안에 있는 값을 출력했다.

 

obj 객체 안에 배열에 접근하기 위해서 arr 객체를 JSONArray를 이용해 생성할때 obj객체에 접근해서 안에 배열 addresses에 접근했다.

'프로그래밍 공부' 카테고리의 다른 글

2025.03.21 스프링 공부  (0) 2025.03.24
2025.03.20 스프링 공부  (0) 2025.03.20
2025.03.18 스프링 공부  (0) 2025.03.18
2025.03.17 스프링 공부  (0) 2025.03.17
2025.03.14 스프링 공부  (0) 2025.03.14