Dev/실무 사용 기술

JSON형식 String을 JSONObject, JSONArray 로 변환

DEV-HJ 2023. 10. 22. 22:13
반응형

1. JSON 라이브러리를 설치 해야한다.

  •  Spring Gradle 프로젝트 였음으로 Gradle로 

-

  • build.gradle 파일 dependencies에 JSON Simple 라이브러리 추가
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	//JSON 추가
	implementation group: 'org.json', name: 'json', version: '20160810'
}

 

객체 안에 배열을 만들고, 배열 안에 객체, 객체 안에 객체를 만들고 싶을때 만드는 방법

public String parseHotkeyConfig(SystemConfigDTO systemConfigDTO) {
    JSONObject hotKey = new JSONObject();
    JSONArray hotkeyList = new JSONArray();
    
    String[] eventNames = {"PreviousImage", "NextImage", "CancelJudge", "HoldJudge", "PanelJudge", "CheckDefect", "LoadDefect"};
    
    for (String eventName : eventNames) {
        JSONObject hotkeyData = new JSONObject();
        hotkeyData.put("altKey", systemConfigDTO.getSelectValue(eventName, systemConfig).equals("Alt"));
        hotkeyData.put("ctrlKey", systemConfigDTO.getSelectValue(eventName, systemConfig).equals("Ctrl"));
        hotkeyData.put("shiftKey", systemConfigDTO.getSelectValue(eventName, systemConfig).equals("Shift"));
        hotkeyData.put("keyCode", systemConfigDTO.getKeyCode(eventName, systemConfig));
        hotkeyData.put("key", systemConfigDTO.getKey(eventName, systemConfig));
        
        JSONObject hotkey = new JSONObject();
        hotkey.put("key", hotkeyData);
        hotkey.put("evt", eventName);
        hotkeyList.add(hotkey);
    }
    
    hotKey.put("CommonShortKeyList", hotkeyList);
    
    return hotKey.toJSONString();
}

public String getSelectValue(String eventName, SystemConfigDTO systemConfig) {
    switch (eventName) {
        case "PreviousImage":
        // getPreviousImageSelect 이 값은 Front에서 SelectBox 선택으로 보낸 값 (ctrl, Alt, Shift, None 중 택 1) Select가 Alt면 altKey 값에 true를 넣는다
            return systemConfigDTO.getPreviousImageSelect();
        case "NextImage":
            return systemConfigDTO.getNextImageSelect();
        case "CancelJudge":
            return systemConfigDTO.getCancelJudgeSelect();
        case "HoldJudge":
            return systemConfigDTO.getHoldJudgeSelect();
        case "PanelJudge":
            return systemConfigDTO.getPanelJudgeSelect();
        case "CheckDefect":
            return systemConfigDTO.getCheckDefectSelect();
        case "LoadDefect":
            return systemConfigDTO.getLoadDefectSelect();
        default:
            return null;
    }
}

public String getKeyCode(String eventName, SystemConfigDTO systemConfig) {
  switch (eventName) {
        case "PreviousImage":        
            return systemConfigDTO.getPreviousKeyCode();
        case "NextImage":
            return systemConfigDTO.getNextImageKeyCode();
        case "CancelJudge":
            return systemConfigDTO.getCancelJudgeKeyCode();
        case "HoldJudge":
            return systemConfigDTO.getHoldJudgeKeyCode();
        case "PanelJudge":
            return systemConfigDTO.getPanelJudgeKeyCode();
        case "CheckDefect":
            return systemConfigDTO.getCheckDefectKeyCode();
        case "LoadDefect":
            return systemConfigDTO.getLoadDefectKeyCode();
        default:
            return null;
    }
}

public String getKey(String eventName, SystemConfigDTO systemConfig) {
     case "PreviousImage":        
            return systemConfigDTO.getPreviousKey();
        case "NextImage":
            return systemConfigDTO.getNextImageKey();
        case "CancelJudge":
            return systemConfigDTO.getCancelJudgeKey();
        case "HoldJudge":
            return systemConfigDTO.getHoldJudgeKey();
        case "PanelJudge":
            return systemConfigDTO.getPanelJudgeKey();
        case "CheckDefect":
            return systemConfigDTO.getCheckDefectKey();
        case "LoadDefect":
            return systemConfigDTO.getLoadDefectKey();
        default:
            return null;
}

코드 설명:

  • parseHotkeyConfig 메서드가 호출되면 PreviousImage, NextImage, CancelJudge, HoldJudge, PanelJudge, heckDefect, LoadDefect 이렇게 7개의 단축키 정보를 JSON으로 만들기 위해 for문이 돈다.
  • for문에서는 getSelectValue, getKeyCode, getKey 메서드가 실행되면서 파라미터 값으로 넘긴 EventName에 PreviousImage가 있으면 PreviousImage와 관련된 select값, KeyCode값, Key 값을 DTO에서 찾아온다. 
  • 그러고 hoyKeyList인 JSONArray에 add 시킨다. 그 후 다른 EventName 6개도 반복하며 실행

결과 

{"CommonShortKeyList" :  [{ "evt" : "PreviousImage", "key" : { "altkey" : false, "ctrlKey ":  false, "shiftKey" : false, "keyCode": 30, "key" : "a"}},{ "evt" : "PreviousImage", "key" : { "altkey" : false, "ctrlKey ":  false, "shiftKey" : false, "keyCode": 30, "key" : "a"}}]}

  • 원래 7개가 들어가 있지만 여기선 2개만 쪼개서 보이게 해놨다.

JSON안에 JSON 3개 넣는 방법

public String parseEnvironmentConfig(SystemConfigDTO systemConfigDTO) {
    JSONObject environment = new JSONObject(); // 최종 JSON
    
    JSONObject imageRadio = new JSONObject(); // JSON 안에 들어갈 JSON 1
    JSONObject tableRowConfig = new JSONObject(); // JSON 안에 들어갈 JSON 2
    JSONObject moduleInfo = new JSONObject(); // JSON 안에 들어갈 JSON 3

    imageRadio.put("max", systemConfigDTO.getImageMax());
    imageRadio.put("min", systemConfigDTO.getImageMin());

    tableRowConfig.put("DefalutValue", systemConfigDTO.getDefalutValue());
    tableRowConfig.put("JobList", systemConfigDTO.isJobList());
    tableRowConfig.put("DefectMeasureList", systemConfigDTO.isDefectMeasureList());

    moduleInfo.put("DefalutEquipGroup", systemConfigDTO.getDefalutEquipGroup());

    environment.put("ImageRatio", imageRadio);
    environment.put("TableRowConfig", tableRowConfig);
    environment.put("ModuleInfo", moduleInfo);

    return environment.toJSONString();
}
  • 간단하니까 설명은 생략하겠다

JSON 하나만 만드는 방법

public String parseFilepathConfig(SystemConfigDTO systemConfigDTO) {
    JSONObject filepath = new JSONObject();

    filepath.put("tkoutPath", systemConfigDTO.getTkoutPath());
    filepath.put("rcsPath", systemConfigDTO.getRcsPath());
    filepath.put("screenShotPath", systemConfigDTO.getScreenShotPath());

    return filepath.toJSONString();
}
  • 간단하니까 설명은 생략하겠다

 

반응형

'Dev > 실무 사용 기술' 카테고리의 다른 글

Spring+Vue.js 다국어 API 구현  (0) 2024.01.14