BackEnd🧵

TIL - JAVA Object to JSON

hae02y 2023. 5. 14. 15:04
반응형

😊review


Jackson

Java Object를 Json으로 변환(직렬화,serializing) 하거나, JSon을 Java Object로 변환(역직렬화, deserializing)하는데 사용할수있는 Java 라이브러리. Jackson과 함께 GSon이라는 라이브러리또한 많이쓰이고 이외에도 엄청많다..!

[jackson github]

[Gson github]

 

 

JSon (JavaScript Object Notation)

name - value 형태의 경량데이터 교환형식이다. 기존에 사용되던 XML보다 인간이 읽고쓰기에 용이한 형태로 작성된다. 

//JSon 형식
{
  "name": "duckgeun",
  "age": 29,
  "address": {
    "street": "exmaple",
    "city": "korea",
    "state": "dj"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "555-555-1234"
    },
    {
      "type": "work",
      "number": "555-555-5678"
    }
  ]
}

[ref. Json]

[ref. Json2]

 

 

stringifyJSon 구현 코드

Object를 받아 Json으로 작성가능한 클래스를 구현해보았다. 

public class stringifyJSON {

  public String ObjectMapper(Object data) throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(data);
  }

  public String stringify(Object data) {

    //입력된 값이 문자열일 경우
    if(data instanceof String){
      return "\""+data+"\""; //String 일경우 "문자열" 출력
      //String.format("\""%s"\"",data); == > 요것도 가능
    }

    //입력된 값이 Integer일 경우
    if(data instanceof Integer){
      return Integer.toString((Integer)data);
    }

    //입력된 값이 Boolean일 경우
    if(data instanceof Boolean){
      return String.valueOf(data);
    }

    //입력된 값이 Object[]일 경우
    if(data instanceof Object[]){
      String result = "["; //결과값에 [ 를 넣는다.

      for(Object element : (Object[]) data){  //data를 돌면서 result에 element를 stingify함수를 재귀돌려서 넣어주고 , 를 추가
        result += stringify(element) +",";
      }
      if(result.endsWith(",")) result = result.substring(0, result.length() -1); //마지막에 ,를 빼준다.
      return result+"]"; //출력 + ];
    }

    //입력된 값이 HashMap일 경우
    if(data instanceof HashMap){
      HashMap<Object, Object> map = new HashMap<>();

      String result = "{";
      for(Map.Entry<?, ?> entry : ((HashMap<?, ?>) data).entrySet()){ //엔트리로 처리한다. <?> => 타입변수에 모든타입사용가능
        result = result + stringify(entry.getKey()) + ":" + stringify(entry.getValue()) +","; //키랑 벨류를 stringify함수 돌려준다.
      }
      if(result.endsWith(",")) result = result.substring(0, result.length() -1); //마지막에 , 제거
      return result +"}";
    }
    //지정되지 않은 타입의 경우에는 "null"을 리턴합니다.
    return "null";
  }
}

 

 

 


 

반응형