본문 바로가기
카테고리 없음

JSON 파일 작업

by SuldenLion 2023. 6. 18.
반응형

 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파일이 만들어진다.

반응형

댓글