목차
- JSON 이란
- JSON 특징
- JSON 문법
- JSON 형식
- JSON 문제점
- JSON 파싱 예제
1. JSON 이란?
*위키피디아
JSON(JavaScript Object Notation)은 속성-값 쌍(attribute–value pairs), 배열 자료형(array data types) 또는 기타 모든 시리얼화 가능한 값(serializable value) 또는 키-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.
JavaScript Object Notation의 두 문자어로 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 DATA 교환 형식이다.
- javascript에서 객체를 만들 때 사용하는 표현식을 말한다.
- JSON 표현식은 사람과 기계 모두 이해하기 쉬우며 용량이 작아서, 최근에는 JSON이 XML을 대체해서 데이터 전송 등에 많이 사용한다.
- JSON은 데이터 포맷일 뿐이며 어떠한 통신방법도, 프로그래밍 문법도 아닌 단순히 데이터를 표시하는 표현 방법일 뿐이다.
2. JSON의 특징
- 서버와 클라이언트 간의 교류에서 일반적으로 많이 사용된다.
- 자바스크립트 객체 표기법과 유사하다.
- 자바스크립트를 이용하여 JSON 형식의 문서를 쉽게 자바스크립트 객체로 변환할 수 있는 이점이 있다.
- JSON 문서형식은 자바스크립트 객체의 형식을 기반으로 만들어졌다.
- 자바스크립트의 문법과 굉장히 유사하지만 텍스트 형식일 뿐이다.
- 다른프로그래밍 언어를 이용해서도 쉽게 만들 수 있다.
- 특정 언어에 종속되지 않으며, 대부분의 프로그래밍 언어에서 JSON 포맷의 데이터를 핸들링할 수 있는 라이브러리를 제공한다.
3. JSON 문법
태그로 표현하기 보다는 중괄호({})같은 형식을 하고, 값을 ','로 나열하기에 그 표현이 간단하다.
{
"Student" : [
{
"name" : "Harry",
"gender" : "male" ,
"age" : 30
},
{
"name" : "Sam",
"gender" : "male" ,
"age" : 31
},
{
"name" : "Oscar",
"gender" : "male" ,
"age" : 29
}
]
}
- JSON 형식은 자바스크립트 객체와 마찬가지로 key/value가 존재할 수 있으며, key 값이나 문자열은 항상 쌍따옴표를 이용하여 표기해야 한다.
- 일반 자바스크립트 객체처럼 원하는 만큼 중첩시켜서 사용할 수도 있다.
- JSON 형식에서는 null, number, string, array, object, boolean을 사용할 수 있다.
4. JSON 형식
{
"name" : "Harry",
"gender" : "male" ,
"age" : 30
"eamil" : null
}
1. name - value 형식의 쌍
2. 값들의 순서화된 리스트 형식
5. JSON의 문제점
JSON은 단순히 데이터만이 아니라 JavaScript 그 자체도 전달 할 수 있다. 이말은 JSON 데이터라고 해서 받았는데 단순 데이터가 아니라 JavaScript일 수도 있고, 그게 실행 될 수 있다는 것이다.
(데이터를 받았는데 악성 스크립트)
위와 같은 이유로 받은 내용에서 순수하게 데이터만 추출하기 위해서 JSON 관련 라이브러리를 따로 사용하기도 한다.
6. 그래서 실제로 어떻게 사용하는데?
자바 -인텔리제이 예제
먼저 json 라이브러리 중 하나인 json-simple에 대한 의존성을 그래들에 추가한다.
//Json형식의 String data
String jsonData = "{\"name\":\"harry\",\"gender\":\"male\",\"age\":\"30\"}";
//JsonParser 객체
JSONParser parser = new JSONParser();
//jsonData를 파싱한 JSONObject
JSONObject object = (JSONObject) parser.parse(jsonData);
//JsonData 쪼개서 변수에 넣어줌
String name = object.get("name").toString();
String gender = object.get("gender").toString();
String age = object.get("age").toString();
//출력
System.out.println("이름 : "+name+"\n성별 : "+gender+"\n나이 : "+age);
결과
이번엔 배열을 추출해보자
//Json형식의 String data
String jsonData = "[\n" +
" \t{\n" +
" \t\"name\" : \"Harry\",\n" +
" \t\"gender\" : \"male\" ,\n" +
" \t\"age\" : 30 \n" +
" },\n" +
" {\n" +
" \t\"name\" : \"Sam\",\n" +
" \t\"gender\" : \"male\" ,\n" +
" \t\"age\" : 31 \n" +
" },\n" +
" {\n" +
" \t\"name\" : \"Oscar\",\n" +
" \t\"gender\" : \"male\" ,\n" +
" \t\"age\" : 29 \n" +
" }\n" +
" ]";
//JsonParser 객체
JSONParser parser = new JSONParser();
//jsonData를 파싱한 JSONObject
JSONArray jsonArray = (JSONArray) parser.parse(jsonData);
for(int i = 0; i<jsonArray.size(); i++){
System.out.println(jsonArray.get(i));
}
결과
결론
많은 연습이 필요하겠지만
- {}로 시작하면 Object니 JSONObject를 사용
- []로 시작하면 배열이니 JSONArray를 사용
이 두가지를 잘 기억하면 JSON파싱도 어렵지 않다 이거야!
프로젝트를 진행하면서 API 데이터를 받아올 때 JSON파싱을 사용했던 경험이 있다.
앞으로도 많이 마주칠 것 같으니 미리 정리해봤다.
'개발지식' 카테고리의 다른 글
메모리 구조, 힙(Heap) 영역과 스택(Stack) 영역의 차이 (4) | 2024.11.11 |
---|---|
[개발지식] 스레드(Thread), 싱글 스레드(Single Thread), 멀티 스레드(Multi Thread) (0) | 2024.05.08 |
[통신] HTTP란? (0) | 2024.01.16 |
[Gradle] Gradle이란? (0) | 2024.01.12 |
[API] REST, REST API, RESTful 정리 (1) | 2024.01.11 |