Java Script Object Notation(JSON) 이란 ?
JSON의 필요성
'형식이 일정하지 않은 문자열'에서 원하는 정보를 빼내려고 하는 경우,
아래 처럼 복잡한 split() 메서드를 이용해서 배열의 방에 하나씩 담는 작업을 이중으로 해야하는 불편함이 발생한다.
[예시]
public class MainClass06 {
public static void main(String[] args) {
String info="num:1, name:김구라, addr:노량진";
//위의 문자열을 회원의 정보를 추출해서 변수에 담아보세요.
int num=0;
String name=null;
String addr=null;
String[] result=info.split(","); //split(",") : 콤마(,)를 기준으로 문자열을 나눈다.
num=Integer.parseInt(result[0].split(":")[1]);
name=result[1].split(":")[1];
addr=result[2].split(":")[1];
}
}
JSON 라이브러리를 사용하면 형식이 일정하지 않은 문자열의 data를 불러오기에 편리하다.
JSON 라이브러리 사용하기
JSON 라이브러리를 사용하려면 json 형식의 문자열에 맞춰 data를 입력해주어야한다.
1. JSONArray 사용하기
1-1. JSONArray 에 값 넣기
public class MainClass01 {
public static void main(String[] args) {
//1. JSONArray 객체 만들기
JSONArray jsonArr=new JSONArray();
//2. JSONArray 객체에 put()메소드를 사용하여 data 넣기
jsonArr.put("김구라");
jsonArr.put("해골");
jsonArr.put("원숭이");
//3. JSONArray 객체 안에 있는 정보를 JSON 문자열로 얻어내기
String result1=jsonArr.toString();
System.out.println(result1);
}
}
1-2. JSONArray에 있는 값 출력 해보기
public class MainClass07 {
public static void main(String[] args) {
String info="[10, 20, 30, 40, 50]";
JSONArray arr=new JSONArray(info);
System.out.println(arr.getInt(0)); //index를 통해서 접근한다.
System.out.println(arr.getInt(1));
System.out.println(arr.getInt(2));
System.out.println(arr.getInt(3));
System.out.println(arr.getInt(4));
for(int i=0; i<arr.length(); i++) {
System.out.println(arr.getInt(i));
}
}
}
2. JSONObject 사용하기
2-1. JSONObject에 값 넣기
(1) num, name, boolean type 데이터를 JSONObject 으로 바꾸기
public class MainClass02 {
public static void main(String[] args) {
//1. JSONObject 객체 생성하기
JSONObject jsonObj=new JSONObject();
//2. JSONObject 객체에 put()메소드를 사용해서 key값과 value값 넣기
jsonObj.put("num", 1);
jsonObj.put("name", "김구라");
jsonObj.put("isMan", true);
//3. JSONObject 객체를 String type으로 바꾸기
String result=jsonObj.toString();
System.out.println(result);
}
}
(2) List type의 데이터 JSONObject 으로 바꾸기
public class MainClass03 {
public static void main(String[] args) {
JSONObject jsonObj=new JSONObject();
jsonObj.put("type", "a");
List<String>names=new ArrayList<String>();
names.add("김구라");
names.add("해골");
names.add("원숭이");
jsonObj.put("names", names);
String result=jsonObj.toString();
System.out.println(result);
}
}
(3)Map type의 data를 JSONObject 으로 바꾸기
public class MainClass09 {
public static void main(String[] args) {
//HashMap에 담겨있는 정보를 JSONObject type의 data로 변경해서 쉽게 정보를 추출할 수 있다.
Map<String, Object> map=new HashMap<>();
map.put("num", 2);
map.put("name", "해골");
map.put(addr, "행신동");
//JSONObject 생성자에 HashMap객체의 참조값을 전달하여 JSONObject type의 data로 변경해줌
JSONObject obj3=new JSONObject(map);
//JSONObject type에서 String type의 data로 변경
String json4=obj3.toString();
}
}
public class MainClass09 {
public static void main(String[] args) {
//1. 변수에 담겨 있는 문자열을 JSONObject 객체에 담기
//따로 작성되어 있는 data을 json 형식의 JSONObject 형식으로 변경하기
int num=1;
String name="김구라";
String addr="노량진";
//String json="{\"num\":"+num+ ...}"; 이렇게 작성하기 너무 불편
//put() 메소드를 이용해 편하게 담기
JSONObject obj=new JSONObject();
obj.put("num", 1);
obj.put("name", "김구라");
obj.put("addr", "노량진");
System.out.println(obj); //JSONObject type으로 출력됨 {"num":1,"name":"김구라","addr":"노량진"}
String json2=obj.toString();
//2. HashMap에 담겨있는 정보를 JSONObject type의 data로 변경해서 쉽게 정보를 추출할 수 있다.
Map<String, Object> map=new HashMap<>();
map.put("num", 2);
map.put("name", "해골");
map.put(addr, "행신동");
JSONObject obj3=new JSONObject(map); //JSONObject생성자에 HashMap객체를 변경함
String json4=obj3.toString();
}
}
2-1. JSONObject에서 값 출력하기
public class MainClass04 {
public static void main(String[] args) {
//json 문자열 만들기
String json="{\"num\":1, \"name\":\"김구라\", \"isMan\":true}";
//json 문자열을 이용해서 JSONObject 만들기
JSONObject jsonObj=new JSONObject(json);
int num=jsonObj.getInt("num");
String name=jsonObj.getString("name");
boolean isMan=jsonObj.getBoolean("isMan");
}
}
'JAVA' 카테고리의 다른 글
JAVA Template 등록하기 (0) | 2019.12.21 |
---|---|
JDBC / JAVA 와 DB 연결 / CONNECTION (0) | 2019.12.18 |
JSON 라이브러리 Build Path (0) | 2019.12.17 |
Socket (소켓) 통신 과 TCP / IP 통신 (0) | 2019.12.17 |
Multi Thread(멀티스레드) (0) | 2019.12.13 |