▶ JSON이란
JavaScript Object Notation의 약자로써 데이터 구조와 실제 데이터를 다른 언어 및 플랫폼에서 해석 가능한 형식으로 전송할 수 있게 하는 데이터 교환 포맷이다. (JavaScript 객체를 구조화된 데이터로 주고 받기 위한 포맷)
- JSON은 파싱 또는 직렬화 없이도 JavaScript 프로그램에서 사용할 수 있으며, 소프트웨어에서 파싱 및 생성하기 쉬움.
- 구조화된 데이터를 직렬화해 네트워크에서 교환할 때(서버와 웹 애플리케이션 같은 경우) 주로 사용됨.
- JSON에는 문자열, 숫자, bool, Null, 객체, 배열 등의 데이터를 담을 수 있음.
● 자주 사용되는 JSON 유형
① 사용자 생성 Data로부터 JSON 객체 생성
↳ JSON은 임시 Data의 저장에 적합함. 웹 사이트에 제출된 양식과 같은 사용자 생성 데이터는 임시 Data이다.
② 시스템 간 데이터 전송
↳ 웹 사이트 데이터베이스에는 고객의 주소가 저장되어 있지만, 해당 주소의 유효성 검사를 위해서는 API를 통한 검증이 필요. 해당 주소 데이터를 JSON 형식으로 주소 검증 서비스 API에 전송할 수 있음.
③ 애플리케이션용 Data 구성
↳ 애플리케이션 개발시 각 애플리케이션에는 데이터베이스 및 로그 파일 경로 연결에 필요한 인증이 필요함. 해당 인증 및 파일 경로를 JSON 파일로 지정해 읽어오고 사용 가능.
④ 복잡한 Data Model 간소화하기
- JSON은 데이터 추출 프로세스를 예측 가능하고 사람이 읽을 수 있는 JSON 파일로 변환함으로써 복잡한 문서를 의미있는것으로 식별된 구성 요소로 간소화 할 수 있음.
● JSON이 개발자들에게 인기를 얻게 된 이유
- 인간이 읽을 수 있는 문서로 이루어졌기 때문이다.
- 코딩도 더 적게 필요하고, 처리 속도가 빠른 경량 언어이기 때문이다.
- 많은 데이터를 반환 및 표시해야하는 웹 서비스에 매우 적합
▶ 문서 데이터베이스란
- 문서 지향 정보를 저장, 검색, 관리하기 위해 설계된 비관계형 데이터베이스 유형. 스키마를 사전 정의하는 대신 문서 데이터베이스는 문서로 이루어진 데이터 컬렉션을 저장할 수 있게 함. NoSQL DB나 JSON DB는 문서 데이터베이스에 해당함.
- 문서 데이터베이스는 데이터를 관계형(구조적) 형식이 아닌 문서 모델 형식(반 구조적)으로 저장함. 이는 더 큰 유연성을 제공하고, 개발자가 사전에 스키마를 계획할 필요없이 애플리케이션 코드에 사용중인 것과 동일한 형식을 사용할 수 있게 해줌.
- JSON 데이터 유형이나 JSON 지향 쿼리 언어를 사용하는 애플리케이션은 JSON 문서 DB에 저장된 데이터와 상호작용가능.
- JSON 문서 데이터베이스 내의 JSON 데이터는 데이터를 정의할 스키마 없이도 저장, 인덱싱, 쿼리 될 수 있음.
▶ JSON 만들기 <JavaScript>
JavaScript로 구조화 된 객체를 만들고, stringify 메서드로 Server 통신이 가능한 JSON 구조체 만들기
(JSON 객체는 객체가 제공하는 stringify()와 parse() 메서드로 JSON 문자열을 만들 수도, 파싱할 수도 있음)
// 생성자로 객체 만들기
var myData = new Object();
myData.name = "SuldenLion";
myData.age = 23;
myData.flag = true;
var item1 = new Object();
item1.weaponName = "LionSword";
item1.weaponPower = 7;
item1.weaponNumber = 1111;
var item2 = new Object();
item2.weaponName = "LionSpear";
item2.weaponPower = 8;
item2.weaponNumber = 1112;
var itemArray = new Array();
itemArray.push(item1);
itemArray.push(item2);
myData.items = itemArray;
- Object와 Array 객체로 구조화 된 데이터를 만든다.
- 객체를 생성하고 key에 해당하는 개별값을 선언해주면 바로 사용 가능.
- 위와 같은 생성자로 객체 생성하는 방식 말고 동일한 객체를 만드는 다른 방식 (중괄호 객체 선언 방식)이 일반적인듯 하다.
// 중괄호 객체선언
var myData = {
name : "SuldenLion",
age : 23,
flag : true,
items : [
{
weaponName : "LionSword",
weaponPower : 7,
weaponNumber : 1111
},
{
weaponName : "LionSpear",
weaponPower : 8,
weaponNumber : 1112
}
]
};
↳ JSON과 비슷해 보이는 이 방법을 객체 리터럴 표기법이라함.
- 객체 리터럴 표기법으로 만들어지는 객체는 Object / Array 유형의 객체 이외에도 다양한 Format의 객체를 사용하여 만들어질수 있음
var jsonData = JSON.stringify(myData);
- 위에서 만든 myData 객체를 JSON 문자열로 만들면 다음과 같이 출력되는 jsonData가 만들어짐
{"name":"SuldenLion","age":23,"flag":true,"items":[{"weaponName":"LionSword","weaponPower":7,"weaponNumber":1111},{"weaponName":"LionSpear","weaponPower":8,"weaponNumber":1112}]};
이런 식으로 만들어지고 보기 쉽게 정렬하면 다음과 같다. (단축키 : ctrl + k + f (vscode, json파일일때)) (Eclipse → ctrl + shift + f)
{
"name" : "SuldenLion",
"age" : 23,
"flag" : true,
"items" : [
{
"weaponName" : "LionSword",
"weaponPower" : 7,
"weaponNumber" : 1111
},
{
"weaponName" : "LionSpear",
"weaponPower" : 8,
"weaponNumber" : 1112
}
]
};
↳ 속성값이 큰 따옴표 ""로 감싸지며, 이 데이터가 JSON 문자열이다.
- 서버와 통신시 JSON 문자열 값을 requestbody에 넣어야 보낼 수 있음
반대로 JSON 문자열을 서버에서 받아왔을 때 JavaScript 데이터로 바꾸려면
parsedData = JSON.parse(jsonData);
이런식으로 쓰고, 다음과 같이 보일 것이다.
{
name : "SuldenLion",
age : 23,
flag : true,
items : [
{
weaponName : "LionSword",
weaponPower : 7,
weaponNumber : 1111
},
{
weaponName : "LionSpear",
weaponPower : 8,
weaponNumber : 1112
}
]
};
▶ JSON 만들기 <Java>
다음은 Java에서 JSON 파일을 만들어 볼 것이다. (자바에서 동적으로 데이터 받아와서 JSON 변환할때 사용)
- 먼저 JSON 사용을 위한 라이브러리 jar파일을 다운받아서 project 내 Referenced Libraries에 Build Path에 들어간다.
- Add External JARs를 하여 넣어주면 사용할 준비가 된다.
- org.json.simple 패키지의 JSONObject와 JSONArray를 활용하여 JSON 파일 내용을 수정해주고 생성할 수 있음.
package SimpleJsonTest;
import java.io.*;
import java.util.*;
import org.json.simple.*;
public class ExecuteService {
public ExecuteService() {
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject;
// ...
// id, name, skill 정보가 담긴 list가 있다고 가정
// ...
for (int i = 0; i < list.size(); i++) {
jsonObject = new JSONObject();
jsonObject.put("id", list.get(i).getId());
jsonObject.put("name", list.get(i).getName());
jsonObject.put("skill", list.get(i).getSkill());
jsonArray.add(jsonObject);
}
try {
FileWriter fw = new FileWriter("C:\\Users\\...\\test.json");
fw.write(jsonArray.toJSONString());
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- jsonObject는 키값에 해당하는 값을 list에서 받아와 put 해준다.
- jsonArray에 해당 object들을 넣어준다.
- jsonObject를 매번 생성해주는 이유는 new JSONObject를 위에다 빼서 쓰면 하나의 jsonObject에 값이 덮어씌워지는 현상이 있기 때문이다. (마지막으로 put한 object값이 jsonArray에 담긴 모든 내용으로 표시됨)
- FileWriter를 원하는 경로에 파일 명을 명시해서 쓰고, jsonArray의 toJSONString() 메서드를 write하면 json파일이 만들어진다.
댓글