Spring

[Spring] JSON

로아다 2023. 7. 11. 11:04
728x90
반응형
JSON

 - JavaScript Object Notation

 - 언제든지 자바스크립트 오브젝트로 변환할 수 있는 문자열 형식

 - 다양한 다른 언어들의 객체로 변환하기에도 편리하기 때문에 객체들의 공용어로 활용되고 있다.

 - 언어에 종속되어 있지 않은 공통 규격

 

자바에서 JSON 활용하기
	<dependency>
	    <groupId>com.googlecode.json-simple</groupId>
	    <artifactId>json-simple</artifactId>
	    <version>1.1.1</version>
	</dependency>

 

JSONParser

 - JSON 형식 문자열을 JSONObject로 변환하는 기능을 가진 클래스

 - 문자열로 전달하거나 Reader를 전달하여 사용할 수 있다.

 

JSONObject

 - 자바의 Map처럼 사용할 수 있는 객체

 - 해당 객체에 값들을 추가한 후에 .toJSONString()을 호출하여 JSON 형식의 문자열을 얻을 수 있다.

 - 배열을 값으로 추가할 때는 List(or JSONArray)로 추가하면 된다.

 - 자바의 기본 배열은 사용할 수 없다.

 - 객체를 값으로 추가할 때는 Map(or JSONObject)으로 추가할 수 있다.

 

JSON과 Javascript Object의 차이

 - Javascript Object key ""를 생략할 수 있지만 JSON은 반드시 써야한다.

 - Javascript Object 문자열 값 또는 key ' '를 쓸 수 있지만 JSON " "만 써야한다.

 - JSON 문자열 형식의 이름이고 JavaScript Object는 자바스크립트의 인스턴스이다.

 

활용 (상세 [Spring] REST API 참고)

 - RestController에서 데이터를 application/json 형식으로 응답할 때 사용한다.

 - JSON 형식의 문자열을 받은 웹 페이지에서 해당 값을 Javascript Object로 변환하여 페이지 구성에 활용할 수 있다.

 - 요청 JSON 형식으로 데이터를 보내 DB에 반영하는 것도 가능하다.

 

자바에서 JSON 객체 만들어 보기
package practice;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class SimpleJsonTest {
	
	public static void main(String[] args) {
		
		// 쉽게 JSON 객체를 생성할 수 있다.
		JSONObject obj = new JSONObject();
		
		obj.put("name", "홍길동");
		obj.put("age", 40);
		
		System.out.println(obj);
		
		// 자바의 Map을 바로 JSON 형태 문자열로 변환해준다.
		Map<String, Object> map = new HashMap<>();
		// 자바스크립트에 배열로 전달하고 싶을 때는 List를 사용한다.
		List<String> hobbies = new ArrayList<>();
		// 객체 내부에 객체를 넣을 수 있다.
		Map<String, Object> car = new HashMap<>();
		
		car.put("carName", "스포티지");
		car.put("carNumber", "12가3456");
		car.put("carAge", 8);
		
		hobbies.add("농구");
		hobbies.add("야구");
		hobbies.add("발야구");
		
		map.put("name", "임꺽정");
		map.put("phone", "123-1234-1234");
		map.put("age", 33);
		map.put("hobby", hobbies);
		map.put("car", car);
		
		String jsonStr = new JSONObject(map).toJSONString();
		
		System.out.println(jsonStr);
		
		// JSON 형식 문자열 -> JSON Object로 만들기 (파싱)
		JSONParser parser = new JSONParser();
		
		try {
			JSONObject parsed = (JSONObject)parser.parse("{\"fruit\":\"apple\", \"drink\":\"ade\""
				+ ",\"flavor\":[3, 5, 6, 11]}");
			
			System.out.println("JSON 문자열로 객체 만들어서 자바에서 활용하기");
			System.out.println(parsed.get("fruit"));
			System.out.println(parsed.get("drink"));
			
			System.out.println("JSON 배열 값 꺼내서 활용해보기");
			List<Integer> flavorNums = (List<Integer>)(parsed.get("flavor"));
			
			for (int i = 0; i < flavorNums.size(); ++i) {
				System.out.println(flavorNums.get(i));
			}
			
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
}

결과

 

728x90
반응형