[Spring] JSON
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();
}
}
}