Dev JSON 2 | JavaScript, Java

공부의 기록·2021년 12월 9일
0

Dev JSON

목록 보기
2/4
post-thumbnail

스텍

node.js

나온지 오래된 순정 express 프레임워크를 전부 셋팅해서 사용하는 것이 아니라
Nest.JS 와 같은 최신 프레임워크를 사용한다면 별도의 셋팅없이 백엔드 단에서 JSON 파일을 읽을 수 있다.

본문에서 배운 개념은 이미 알고 있고 사용하고 있는 개념이었다.

그러나 JSON.stringify() 와 JSON.parse() 이전에 어떤 것들이 있었고
나아가서 각 메서드가 정확히 어떤 것인지 조금 더 잘 알게 되었다는 점에서 뜻깊은 시간이었다.

심심하면 아래 영상을 시청해보는 것도 나쁘지 않다.
https://www.youtube.com/watch?v=ff4fgQxPaO0


나아가기

본 도서에는 추가적으로 아래의 컨텐츠가 포함되어 있었다.
하지만 나는 추가적인 시간을 소요할 정도의 가치가 없다고 판단하고 우선순위가 높은 다른 챕터를 읽기로 결정했다.

  1. Node REPL
  2. Mocha, Cahil 를 이용한 맞춤 단위 테스트
  3. Unirest 를 이용한 오픈소스 멀티 플랫폼 REST 클라이언트
  4. Yeoman ㅇ

JSON 직렬화

JSON 직렬화는 일반적인 프로그래밍 언어 상의 객체를 JSON 타입으로 바꿔주는 과정을 의미합니다. 이러한 과정은 크게 두 가지가 있으며, 지금은 stringify() 의 방법을 사용하고 있습니다.

  1. JSON.stringify() | 매우 효율적임
  2. JSON.toJSON() | 별도로 정의해서 사용할 수 있으니 stringify 기능이 무용지물로 변해버린다.

JSON.stringify()

const age=100;
console.log("age = "+JSON.stringify(age)+"\n");

const name="unchpaered";
console.log("name = "+JSON.stringify(name)+"\n");

const array=['a1','a2','b1','c1'];
console.log("array = "+JSON.stringify(array)+"\n");

const bool=true;
console.log("bool = "+JSON.stringify(bool)+"\n");

const obj={
  like: "potato",
  dislike: "sweet potato",
  love: "sweety potato"
}
console.log("object = "+JSON.stringify(obj)+"\n");

JSON.stringify(value[, replacer [, space]])

위 함수의 인자는 다음과 닽다.

  1. Value | 직렬화할 Javscript 값 (필수)
  2. Replacer | 함수 혹은 배열. (비필수)
    함수가 인자로 주어지면 stringify() 메서드는 이 함수를 개쳉 안의 각 키-값 쌍에 호출한다.
  3. Space | 들여쓰기 값을 설정하며, 숫자 혹은 문자열을 값으로 받는다. (비필수)
    숫자가 주어지면 각 들여쓰기 수준마다 추가되는 공백문자의 수를 이 값으로 설정한다.
const obj={
  like: "potato",
  dislike: "sweet potato",
  love: "sweety potato",
  tags: ["t-shirt", "pants", "neck tie"]
}
console.log("object = "+JSON.stringify(obj, null, 2)+"\n");

JSON.toJSON()

위 이름을 가진 함수를 객체 안에서 정의해버리면
JSON.stringify() 가 무력화되고 toJSON() 의 리턴값만 반환하는 문제가 생긴다.

const obj={
  like: "potato",
  dislike: "sweet potato",
  love: "sweety potato",
  tags: ["t-shirt", "pants", "neck tie"]
}
obj.toJSON=function() {
  return "Hello, I'm an object";
}
console.log("obj.toJSON() : "+JSON.stringify(obj,null,2)+"\n");


JSON 비직렬화

JSON 비직렬화는 JSON 타입의 문서를 일반적인 프로그래밍 언어 상의 객체로 바꿔주는 과정을 의미합니다. 이러한 과정은 크게 두 가지가 있으며, 지금은 parse() 의 방법을 사용하고 있습니다.

  1. JSON.eval() | 보안상의 취약점이 있음
    eval 은 JSON 문서 안의 메서드를 실행시켜버리는 특징을 가지고 있습니다.
    따라서 누군가가 악의적으로 심어놓은 함수도 실행해버립니다.
  2. JSON.parse()
    이와 달리 parse 는 함수가 있을 시 에러를 발생시킵니다.
    따라서 더 보안에 강하다고 할 수 있습니다.

JSON.eval()

const obj='{ "sessionDate": new Date()}';
console.log("Parse with eval() : "+eval("("+obj+")").sessionDate+"\n");
console.log("Parse with parse() : "+JSON.parse(obj).sessionDate"\n");

JSON.parse()

const obj={
  like: "potato",
  dislike: "sweet potato",
  love: "sweety potato",
  tags: ["t-shirt", "pants", "neck tie"]
}
const objJson=JSON.stringify(obj);
const objParser=JSON.parse(objJson);
console.log(objParser.like);

profile
2022년 12월 9일 부터 노션 페이지에서 작성을 이어가고 있습니다.

0개의 댓글