문제접근
json이 데이터라는 것과 이것이 키-값, 속성-값 쌍으로 이우어져있다는 것을 알게되었다. 그런데 이 용어들에 대해서 정확히 알지 못했고 스프링기본강의를 수강하던중 이 용어들이 나와서 한참 해맸다.
Spring자체가 서버를 다루는 프레임워크다 보니 JSON을 다루는 것도 기본이라고 할 수있을 것 같았다.
JSONObject(json객체), JSONArray(json배열)이라고하는데 둘다 배열을 출력하는 것을 알게 되었다. 그리고 jsonarray를 하면 특정 부분의 json을 출력하는데 기준이 [ ] 있고 없고 차이인 것 같은데 도무지 갈피가 안잡혔다.
이 개발자님의 글을 소개하자면
위에 내가 언급했다시피 json은 키-값, 속성-값 쌍으로이루어진 사람들이 알아볼 수 있도록 만든 데이터이다.
따라서 공통된 부분을 카테고리화 시키는데 {}로 묶고 그안에 : 과 , 로 키 :값 과 또다른 키-값을 ,로 구분하는 것이다. 위 개발자님의 예시를 보자
도서관에서 빌린 책의 데이터를 정리해보려고 한다.
책은 총 3권이 존재하며, 각 책의 정보는 다음과 같다.
책1. 제목 : 이기적 유전자, 저자 : 리처드 도킨스, 발행일 : 1976
책2. 제목 : 파피용, 저자 : 베르나르 베르베르, 발행일 : 2006
책3. 제목 : 7년의 밤, 저자 : 정유정, 발행일 : 2011
{
"제목" : "이기적 유전자",
"저자" : "리처드 도킨스",
"발행일" : 1976
}
{
"제목" : "파피용",
"저자" : "베르나르 베르베르",
"발행일" : 2006
}
{
"제목" : "7년의 밤",
"저자" : "정유정",
"발행일" : 2011
}
"book1" : {
"제목" : "이기적 유전자",
"저자" : "리처드 도킨스",
"발행일" : 1976
},
"book2" : {
"제목" : "파피용",
"저자" : "베르나르 베르베르",
"발행일" : 2006
},
"book3" : {
"제목" : "7년의 밤",
"저자" : "정유정",
"발행일" : 2011
}
그런데 json 내부데이터는 제목, 저자, 발행일이 달라지니까 book1,2,3안에 각각 있어야 되지만 이 book1,2,3은 책이라는 공통이름으로 키끼리만 공통으로 묶을 수 있다.
--> 이때 []가 나오는 것인 것이다.................아......................
따라서 최종 json의 형태(우리가 앞으로 많이 볼 형태)가 바로 아래와 같아지게 되는 것이다.
"book" : [{
"제목" : "이기적 유전자",
"저자" : "리처드 도킨스",
"발행일" : 1976
}, {
"제목" : "파피용",
"저자" : "베르나르 베르베르",
"발행일" : 2006
}, {
"제목" : "7년의 밤",
"저자" : "정유정",
"발행일" : 2011
}]
결국 키-값들이 있는데 어떤 키값은 book1,2,3처럼 키값이 묶일수 있어서 키-값, 키-값으로 나타내는것이 아니라 키 : [ {키:값} , {키:값}......] 이되는 것이다.
무슨 알고리즘을 적용하고 복잡한 입출력을 통해서 저런 형태가 나오는게 아니라 단순히 사람이 읽기 쉬운 기호의 형태를 띄우고 서버도 그것을 이해하여(정확히는 사람이 만든 json라이브러리 때문에) 빠른 속도로 json데이터를 받아올 수 있는 것이었다.............
참고 : http://daplus.net/java-jsonobject%EC%99%80-jsonarray%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90/
외국 블로그라 말을 정리해 보겠다.
JSONObject는 중괄호로 시작하는(중괄호 뒤) 전체 JSON을 다룰 때 사용 한다. JSON 개체는 일반적으로 한 항목과 관련된 키 / 값 쌍을 포함하는 데 사용됩니다. 예를 들면 :{"name": "item1", "description":"a JSON object"}
JSONArray는JSON 데이터로 작업 할 때 대괄호로 시작하는 JSON을 구문 분석(부분만 추출) 하는 데 사용 합니다.
예를 들면 : 키값 : [{"name":"item 1"},{"name": "item2} ]