상세 컨텐츠

본문 제목

[FE 45] _23.06.12 _ Day 42 ( [자료구조/알고리즘] 재귀)

프론트앤드 부트캠프/Day

by 코린’s 2023. 6. 12. 13:41

본문

728x90
반응형

JSON.stringify

 

JSON.stringify() 함수는 JavaScript 객체나 값을 JSON 형식의 문자열로 변환하는 내장 함수입니다. 이 함수를 사용하면 JavaScript 객체를 직렬화하여 JSON 형식으로 표현할 수 있습니다.

 

JSON.stringify() 함수의 기본적인 사용법은 다음과 같습니다

:

const obj = {
  name: "John",
  age: 30,
  city: "New York"
};

const jsonString = JSON.stringify(obj);
console.log(jsonString);
// 출력: {"name":"John","age":30,"city":"New York"}

위의 예시에서 obj 객체는 JSON.stringify() 함수를 사용하여 JSON 형식의 문자열로 변환됩니다.

변환된 JSON 문자열은 console.log를 통해 출력됩니다.

JSON.stringify() 함수는 두 번째 매개변수와 세 번째 매개변수를 선택적으로 받을 수 있습니다.

 

- 두 번째 매개변수는 필터링 함수(replacer)로, 변환할 속성을 선택적으로 포함하거나 제외하는 데 사용됩니다.

  이 함수는 각 키(key)와 값 (value) 쌍을 받아 변환 결과를 반환해야 합니다.

 

- 세 번째 매개변수는 들여쓰기(indentation)로, 변환된 JSON 문자열의 가독성을 높이기 위해 사용됩니다.

   숫자를 전달하면 해당 숫자만큼 들여쓰기가 적용되고, 문자열을 전달하면 해당 문자열이 들여쓰기로 사용됩니다.

 

다음은 두 번째 매개변수와 세 번째 매개변수를 사용한 예시입니다

:

const obj = {
  name: "John",
  age: 30,
  city: "New York",
  isAdmin: true
};

const jsonString = JSON.stringify(obj, ["name", "age"], 2);
console.log(jsonString);
/*
출력:
{
  "name": "John",
  "age": 30
}
*/

위의 예시에서 두 번째 매개변수로 ["name", "age"] 배열을 전달하여 "name"과 "age" 속성만 변환에 포함시킵니다. 세 번째 매개변수로 2를 전달하여 들여쓰기를 2칸으로 설정합니다.

 

JSON.stringify() 함수는 JavaScript 객체나 값을 JSON 형식으로 변환하는 강력한 기능을 제공합니다. 이를 통해 데이터 교환이나 저장, 네트워크 통신 등 다양한 상황에서 활용할 수 있습니다.

 


객체를 JSON의 형태로 변환하거나 JSON을 객체의 형태로 변환하는 방법입니다. 이를 위한 메서드는 다음과 같습니다.

  • JSON.stringify : 객체를 JSON으로 변환합니다.
  • JSON.parse : JSON을 객체로 변환합니다.

* 단, undefined와 function은 JSON으로 생략되거나 null로 변환됩니다.
*
* 2. stringfyJSON은 아래와 같이 작동합니다.
* - Boolean이 input으로 주어졌을 경우
* stringifyJSON(true); // 'true'
* - String이 input으로 주어졌을 경우
* stringifyJSON('foo'); // '"foo"'
* - Array가 input으로 주어졌을 경우
* stringifyJSON([1, 'false', false]); // '[1,"false",false]'
* - Object가 input으로 주어졌을 경우
* stringifyJSON({ x: 5 }); // '{"x":5}'
* - undefined, function이 주어졌을 경우
* stringifyJSON(undefined) // undefined
* stringifyJSON(function(){}) // undefined
* stringifyJSON({ x: undefined, y: function(){} }) // '{}'
*
* 3. spec/stringifyJSONSpec.js의 stringifiableObjects 배열을 참고해서 테스트에서 어떤 input 값들이
* 주어지고, 어떻게 stringify해 주어야 할지 생각해 보세요.
*
* 4. 그냥 테스트 통과를 하고 싶으시다면, 다음과 같이 구현하면 될 거예요.
* const stringifyJSON = JSON.stringify;
*
* 하지만 이 과제의 목적은 재귀를 공부하는 것이니, 처음부터 구현해봐야겠지요?:
*/
 
function stringifyJSON(obj) {
  // your code goes here
   // 기본 데이터 유형 (문자열, 숫자, 불리언) 처리
 
};

// 다음 코드는 결과 제출을 위한 코드입니다. 신경 쓰지 않아도 좋습니다.
if (typeof window === "undefined") {
  module.exports = stringifyJSON;
}
   // 기본 데이터 유형 (문자열, 숫자, 불리언) 처리
   if (typeof obj === "string") {
    return '"' + obj + '"';
  }
  if (typeof obj === "number" || typeof obj === "boolean") {
    return String(obj);
  }
  
  // null 처리
  if (obj === null) {
    return "null";
  }
  
  // 배열 처리
  if (Array.isArray(obj)) {
    const jsonArray = obj.map(element => stringifyJSON(element));
    return "[" + jsonArray.join(",") + "]";
  }
  
  // 객체 처리
  if (typeof obj === "object") {
    const jsonProperties = [];
    for (let key in obj) {
      if (typeof obj[key] !== "function" && obj[key] !== undefined) {
        const jsonKey = '"' + key + '"';
        const jsonValue = stringifyJSON(obj[key]);
        jsonProperties.push(jsonKey + ":" + jsonValue);
      }
    }
    return "{" + jsonProperties.join(",") + "}";
  }
  
  // 그 외의 경우 처리
  return undefined;

/**
 * 1. Browser에 존재하는 JSON.stringfy 함수를 직접 구현해 봅니다.
 * JSON.stringfy 함수는 input 값을 JSON 형식으로 변환합니다.
 * 단, undefined와 function은 JSON으로 생략되거나 null로 변환됩니다.
 *
 * 2. stringfyJSON은 아래와 같이 작동합니다.
 * - Boolean이 input으로 주어졌을 경우
 * stringifyJSON(true);                // 'true'
 * - String이 input으로 주어졌을 경우
 * stringifyJSON('foo');               // '"foo"'
 * - Array가 input으로 주어졌을 경우
 * stringifyJSON([1, 'false', false]); // '[1,"false",false]'
 * - Object가 input으로 주어졌을 경우
 * stringifyJSON({ x: 5 });            // '{"x":5}'
 * - undefined, function이 주어졌을 경우
 * stringifyJSON(undefined)            // undefined
 * stringifyJSON(function(){})         // undefined
 * stringifyJSON({ x: undefined, y: function(){} })   // '{}'
 *
 * 3. spec/stringifyJSONSpec.js의 stringifiableObjects 배열을 참고해서 테스트에서 어떤 input 값들이
 * 주어지고, 어떻게 stringify해 주어야 할지 생각해 보세요.
 *
 * 4. 그냥 테스트 통과를 하고 싶으시다면, 다음과 같이 구현하면 될 거예요.
 *  const stringifyJSON = JSON.stringify;
 *
 * 하지만 이 과제의 목적은 재귀를 공부하는 것이니, 처음부터 구현해봐야겠지요?:
 */
function stringifyJSON(obj) {
  // your code goes here
   // 기본 데이터 유형 (문자열, 숫자, 불리언) 처리
   if (typeof obj === "string") {
    return '"' + obj + '"';
  }
  if (typeof obj === "number" || typeof obj === "boolean") {
    return String(obj);
  }
  
  // null 처리
  if (obj === null) {
    return "null";
  }
  
  // 배열 처리
  if (Array.isArray(obj)) {
    const jsonArray = obj.map(element => stringifyJSON(element));
    return "[" + jsonArray.join(",") + "]";
  }
  
  // 객체 처리
  if (typeof obj === "object") {
    const jsonProperties = [];
    for (let key in obj) {
      if (typeof obj[key] !== "function" && obj[key] !== undefined) {
        const jsonKey = '"' + key + '"';
        const jsonValue = stringifyJSON(obj[key]);
        jsonProperties.push(jsonKey + ":" + jsonValue);
      }
    }
    return "{" + jsonProperties.join(",") + "}";
  }
  
  // 그 외의 경우 처리
  return undefined;
  

};

// 다음 코드는 결과 제출을 위한 코드입니다. 신경 쓰지 않아도 좋습니다.
if (typeof window === "undefined") {
  module.exports = stringifyJSON;
}
  stringifyJSON는 JSON.stringify 함수를 실행했을 때와 같은 결과를 리턴해야 합니다.
    ✓ 객체는 문자열 "9"로 변환되어야 합니다
    ✓ 객체는 문자열 "null"로 변환되어야 합니다
    ✓ 객체는 문자열 "true"로 변환되어야 합니다
    ✓ 객체는 문자열 "false"로 변환되어야 합니다
    ✓ 객체는 문자열 ""Hello world""로 변환되어야 합니다
    ✓ 객체는 문자열 "[]"로 변환되어야 합니다
    ✓ 객체는 문자열 "[8]"로 변환되어야 합니다
    ✓ 객체는 문자열 "["hi"]"로 변환되어야 합니다
    ✓ 객체는 문자열 "[8,"hi"]"로 변환되어야 합니다
    ✓ 객체는 문자열 "[1,0,-1,-0.3,0.3,1343.32,3345,0.00011999]"로 변환되어야 합니다
    ✓ 객체는 문자열 "[8,[[],3,4]]"로 변환되어야 합니다
    ✓ 객체는 문자열 "[[[["foo"]]]]"로 변환되어야 합니다
    ✓ 객체는 문자열 "{}"로 변환되어야 합니다
    ✓ 객체는 문자열 "{"a":"apple"}"로 변환되어야 합니다
    ✓ 객체는 문자열 "{"foo":true,"bar":false,"baz":null}"로 변환되어야 합니다
    ✓ 객체는 문자열 "{"boolean, true":true,"boolean, false":false,"null":null}"로 변환되어야 합니다
    ✓ 객체는 문자열 "{"a":{"b":"c"}}"로 변환되어야 합니다
    ✓ 객체는 문자열 "{"a":["b","c"]}"로 변환되어야 합니다
    ✓ 객체는 문자열 "[{"a":"b"},{"c":"d"}]"로 변환되어야 합니다
    ✓ 객체는 문자열 "{"a":[],"c":{},"b":true}"로 변환되어야 합니다
    ✓ 함수와 undefined는 stringify되지 않습니다.


  21 passing (9ms)

 

728x90
반응형

관련글 더보기