9-2. JSON

zhyun·2020년 10월 16일
0

HighJava

목록 보기
58/67

XML

  • 데이터 값 양쪽으로 태그가 있다.
  • ex. XML (사람표현)
    • XML문서의 단점 =>
      실제데이터 : a,1,책 (5byte)면 되는데 문서부분(person~전체)
      부수적인 내용 용량이 크다
<?xml version="1.0" encoding="UTF-8"?>
<person>
  <name>a</name>
  <age> 1 </age>
  <hobby></hobby>
</person>  

JSON

  • JavaScript Object Notation
  • 요즘 많이 사용하는 문서 표기 방법
  • 경량(가벼운)의 DATA-교환방식
  • 데이터 형식, 문자열 형태
  • 각 프로그래밍 언어들은 표준에 맞게 JSON을 파싱, 직렬화 가능
  • 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이

JSON 기본구조

  • JavaScript Object 형식으로 표현된 String
  • object는 name / value 형태의 쌍으로 collection 타입
  • object는 { name : value,... } 표현
  • JSON에서 value값으로 가능한 데이터 타입
    • String, number(long타입), object(JSONObject), array, boolean, null

JSON 기본 자료형

1.수(Number)

  • 8진수와 16진수를 표현하는 방법은 지원되지 않는다.
  • 정수, 실수

2.문자열(String)

  • 문자열은 큰 따옴표(")로 구분, 역슬래시 이스케이스 문법 지원
  • 유니코드 문자들
    "1234" "Love" "O-matic" "한글" "\"JSON\""

3.참/거짓(Boolean)

  • true 또는 false 값

4.배열(Array)

  • 0이상의 임의의 종류의 값으로 이루어진 순서가 있는 리스트.
  • 대괄호로 나타내며 요소는 쉼표로 구분한다.
  • singerList":[{"gender":"남자","name":"개리","age":33},{"gender":"여자","name":"비욘세","age":35},{"gender":"남자","name":"마이클잭슨","age":55}]
  • [10, {"v": 20}, [30, "마흔"]]

5.객체(Object)

  • 이름/값 쌍의 집합 중괄호{}를 사용, 문자열이기때문에 반드시 따옴표 ""
  • 각 쌍들은 쉼표(,)로 구별 , 각쌍이 나오는 순서는 의미가 없다
    {"name2": 50, "name3": "값3", "name1": true}

6.null

static Methods

  • JSON.parse(text[,reviver])
    • Parse the string text as JSON
  • JSON.stringify(value[,replacer[,space]])
    • Return a JSON string corresponding to the specified value
    • all instances of undefined are replaced with null

parsing을 위해 json-simple-1.1.1jar 필요

예제 11.JasonTest / A_JsonSimpleWriterTest.java

public class A_JsonSimpleWriterTest {
	public static void main(String[] args) throws IOException {
		//JSON 데이터 생성
		JSONObject jsonObj = new JSONObject(); 
		
		//값 넣기 
		jsonObj.put("name", "오혁");
		jsonObj.put("job", "가수");
		jsonObj.put("age", 28);
		jsonObj.put("addr", "서울 마포구 연남동");
		
		//JSONArray 데이터 생성
		JSONArray singerList = new JSONArray();
		
		JSONObject singer = new JSONObject();
		singer.put("name", "개리");
		singer.put("gender", "남자");
		singer.put("age", 33);
		singerList.add(singer);
		
		singer = new JSONObject();
		singer.put("name", "비욘세");
		singer.put("gender", "여자");
		singer.put("age", 35);
		singerList.add(singer);
		
		singer = new JSONObject();
		singer.put("name", "마이클잭슨");
		singer.put("gender", "남자");
		singer.put("age", 55);
		singerList.add(singer);
		
		jsonObj.put("singerList", singerList);
		
		FileWriter fw = new FileWriter("d:/d_Other/myJsonFile.txt");
		fw.write(jsonObj.toString()); // number타입도 포함되서 문자열로 변환 toString()
		fw.flush();
		fw.close();
		
	}
}
  • FIleWriter할때 경로지정 (d:/d_Other/myJsonFile.txt) 텍스트 파일 생성

예제 11.JasonTest / A_JsonSimpleReadTest.java

public class A_JsonSimpleReadTest {
	public static void main(String[] args) throws IOException, ParseException {
		// Json 읽어오기
		// d:/D_Other/myJsonFile.txt => JSON데이터
		FileReader fr = new FileReader("d:/D_Other/myJsonFile.txt");
		
		JSONParser parser = new JSONParser();
		
		// fr(JSON 데이터) parse 부분
		Object obj = parser.parse(fr); 
		//obj에 담긴 parse한 JSON데이터를  JSONObject로 만들어준다.
		JSONObject jsonFile = (JSONObject) obj; 
		
		//name : value => name이 "name", "job", "age", "addr"인 vlaue값 get
		String name = (String) jsonFile.get("name");
		String job = (String) jsonFile.get("job");
		long age  = (long) jsonFile.get("age"); // number은 long타입
		String addr	= (String) jsonFile.get("addr");
		
		System.out.println("name : "+ name);
		System.out.println("job : "+ job);
		System.out.println("age : "+ age);
		System.out.println("addr : "+ addr);
		
		JSONArray list = (JSONArray) jsonFile.get("singerList");
		
		Iterator<JSONObject> it = list.iterator();
		
		JSONObject singer; 
		while(it.hasNext()) {
			singer = it.next();
			System.out.printf("이름 : %s, \t성별: %s, \t나이: %d\n",
			 		singer.get("name"), singer.get("gender"), singer.get("age"));
		} 
		//JSONObject a = singer.get("gender");
		//a.get("aaa");
		//a.get("bbb");
	}
}
  • System.out.printf("출력 서식", 출력할 내용);
  • %s(문자열 형식), %d(정수가 입력되는 형식)
profile
HI :)

0개의 댓글