JSON (JavaScript Object Notation)

๊ฐ’์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ๋ฒ”์šฉ ํฌ๋งท์œผ๋กœ js์—์„œ ์‚ฌ์šฉํ•  ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํฌ๋งท์ด๋‚˜ ํ˜„์žฌ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋„ json์„ ๋งŽ์ด ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค.

JSON ํฌ๋งท

  • ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„(key)๊ณผ ๊ฐ’(value)๋Š” ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์•ผํ•œ๋‹ค. (์ž‘์€ ๋”ฐ์˜ดํ‘œ x)

  • new๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๊ด€๋ จ ๋งค์„œ๋“œ

  • JSON.stringify(obj) : ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜

    • ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ

      let json = JSON.stringify(value[, replacer, space])
      • value : ์ธ์ฝ”๋”ฉ ํ•˜๋ ค๋Š” ๊ฐ’

        let student = {
          name: 'John',
          age: 30,
          isAdmin: false,
          courses: ['html', 'css', 'js'],
          wife: null,
        };
        let json = JSON.stringify(student);
        
        alert(typeof json); // string
        alert(json);
        /* JSON์œผ๋กœ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ์ฒด:
        {
            "name": "John",
            "age": 30,
            "isAdmin": false,
            "courses": ["html", "css", "js"],
            "wife": null
        }
        */
      • replacer : ์ธ์ฝ”๋”ฉ ํ•˜๊ธธ ์›ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด or ๋งคํ•‘ ํ•จ์ˆ˜

        ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ๋‹ค๋ค„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ •๊ตํ•˜๊ฒŒ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

        let room = {
          number: 23,
        };
        
        let meetup = {
          title: 'Conference',
          participants: [{ name: 'John' }, { name: 'Alice' }],
          place: room, // meetup์€ room์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค
        };
        
        room.occupiedBy = meetup; // room์€ meetup์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค
        
        alert(
          JSON.stringify(meetup, function replacer(key, value) {
            alert(`${key}: ${value}`);
            return key == 'occupiedBy' ? undefined : value;
          })
        );
        
        alert(JSON.stringify(meetup, ['title', 'participants', 'place', 'name', 'number']));
      • space : ์„œ์‹ ๋ณ€๊ฒฝ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ณต๋ฐฑ ๋ฌธ์ž ์ˆ˜

        let user = {
          name: 'John',
          age: 25,
          roles: {
            isAdmin: false,
            isEditor: true,
          },
        };
        
        alert(JSON.stringify(user, null, 2));
        /* 
        {
            "name": "John",
            "age": 25,
            "roles": {
                "isAdmin": false,
                "isEditor": true
            }
        }
        */
        
        alert(JSON.stringify(user, null, 4));
        /*
        {
            "name": "John",
            "age": 25,
            "roles": {
                "isAdmin": false,
                "isEditor": true
            }
        }
        */

    ๋ณ€ํ™˜๋œ string์„ JSON์œผ๋กœ ์ธ์ฝ”๋”ฉ๋œ | ์ง๋ ฌํ™” ์ฒ˜๋ฆฌ๋œ | ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ | ๊ฒฐ์ง‘๋œ ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

    • ๊ฐ์ฒด, ๋ฐฐ์—ด, ์›์‹œ์ž๋ฃŒํ˜•๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

      ๋ฉ”์„œ๋“œ, key๊ฐ€ ์‹ฌ๋ณผํ˜• ํ”„๋กœํผํ‹ฐ, ๊ฐ’์ด undefiend์ธ ํ”„๋กœํผํ‹ฐ๋Š” ๋ฌด์‹œํ•œ๋‹ค.

      • ๊ฐ์ฒด๊ฐ€ ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ณ€ํ™˜์„ ์‹คํŒจํ•œ๋‹ค. (Error)

  • toJSON() : ๊ฐ์ฒด ๋‚ด๋ถ€์— ํ•จ์ˆ˜๊ฐ€ ์ •์˜ ๋˜์–ด ์žˆ์œผ๋ฉด JSON.stringify()ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ toJSON()์ด ํ˜ธ์ถœ ๋œ๋‹ค.

  • JSON.parse : JSON์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜

    • ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ

      let value = JSON.parse(str, [reviver]);
      • str : JSONํ˜•์‹์˜ ๋ฌธ์ž์—ด

      • reviver : ๋ชจ๋“  (key,value) ์Œ์„ ๋Œ€์ƒ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” function(key,value)ํ˜•ํƒœ์˜ ํ•จ์ˆ˜๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

        ์•„๋ž˜์™€ ๊ฐ™์ด date๋ฅผ ๊ทธ๋Œ€๋กœ parse์ด์šฉํ•ด ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜์‹œ date์ •๋ณด๋ฅผ Date ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์—ด๋กœ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— meetup.date.getDate()์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

        ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด reviver๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋‹ค.

        let schedule = `{
            "meetups": [
                {"title":"Conference","date":"2017-11-30T12:00:00.000Z"},
                {"title":"Birthday","date":"2017-04-18T12:00:00.000Z"}
            ]
        }`;
        
        schedule = JSON.parse(schedule, function (key, value) {
          if (key == 'date') return new Date(value);
          return value;
        });
        
        alert(schedule.meetups[1].date.getDate());

Last updated