MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

JSON 객체는 JavaScript Object Notation (JSON)을 구문분석(parsing)하고 값을 JSON으로 변환하는 메서드를 포함합니다. 자신의 흥미로운 기능이 없는 두 메소드 특성을 제외하고 호출 또는 생성될 수 없습니다.

설명

JavaScript 객체 표기법

JSON은 객체, 배열, 숫자, 문자열, 부울 및 null을 직렬화(serialize)하는 구문입니다. JavaScript 구문에 기반을 뒀지만 그것과는 전혀 다릅니다: 일부 JavaScript은 JSON이 아니고 일부 JSON은 JavaScript이 아닙니다. JSON: The JavaScript subset that isn't 참조.

JavaScript와 JSON의 차이
JavaScript 형 JSON의 다른점
객체 및 배열 속성(property)명은 큰따옴표로 묶여야 합니다; 후행(trailing) 쉼표는 금지됩니다.
숫자 선행(leading) 0은 금지됩니다; 소수점은 적어도 한 자릿수가 뒤따라야 합니다.
문자열

제한된 문자 집합만 이스케이프될 수 있습니다; 특정 제어 문자는 금지됩니다; Unicode 줄 구분자(U+2028) 및 단락 구분자(U+2029) 문자는 허용됩니다; 문자열은 큰따옴표로 묶여야 합니다. JSON.parse()가 잘 작동해 코드를 JavaScript로 평가할 때 SyntaxError가 발생되는 다음 예 참조:

var code = '"\u2028\u2029"';
JSON.parse(code); // 잘 작동
eval(code); // 실패

전체 JSON 구문은 다음과 같습니다:

JSON = null
    or true or false
    or JSONNumber
    or JSONString
    or JSONObject
    or JSONArray

JSONNumber = - PositiveNumber
          or PositiveNumber
PositiveNumber = DecimalNumber
              or DecimalNumber . Digits
              or DecimalNumber . Digits ExponentPart
              or DecimalNumber ExponentPart
DecimalNumber = 0
             or OneToNine Digits
ExponentPart = e Exponent
            or E Exponent
Exponent = Digits
        or + Digits
        or - Digits
Digits = Digit
      or Digits Digit
Digit = 0 through 9
OneToNine = 1 through 9

JSONString = ""
          or " StringCharacters "
StringCharacters = StringCharacter
                or StringCharacters StringCharacter
StringCharacter = any character
                  except " or \ or U+0000 through U+001F
               or EscapeSequence
EscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t
              or \u HexDigit HexDigit HexDigit HexDigit
HexDigit = 0 through 9
        or A through F
        or a through f

JSONObject = { }
          or { Members }
Members = JSONString : JSON
       or Members , JSONString : JSON

JSONArray = [ ]
         or [ ArrayElements ]
ArrayElements = JSON
             or ArrayElements , JSON

중요하지 않은 공백은 JSONNumber (숫자에는 공백이 없어야 함) 또는 JSONString (문자열에서 해당 문자로 해석되거나 오류를 일으킴) 내를 제외하고 어디서나 존재할 수 있습니다. 탭 문자 (U+0009), 캐리지 리턴 (U+000D), 라인 피드 (U+000A) 및 스페이스 (U+0020) 문자는 유일하게 유효한 공백 문자입니다.

메서드

JSON.parse()
문자열을 JSON으로 보고 구문 분석합니다, 선택 사항으로 구문 분석으로 생성된 값과 속성을 변환해 그 값을 반환합니다.
JSON.stringify()
지정된 값에 해당하는 JSON 문자열을 반환합니다, 선택 사항으로 특정 속성만 포함하거나 사용자 정의 방식으로 속성을 대체합니다.

폴리필

JSON 객체는 예전 브라우저에서는 지원되지 않습니다. 본디 이를 지원하지 않는 (Internet Explorer 6 같은) 구현체에서 JSON 객체를 사용할 수 있게 하는 다음 코드를 스크립트의 시작부에 삽입하여 이를 해결할 수 있습니다.

다음 알고리즘은 원(native) JSON 객체의 모방입니다:

if (!window.JSON) {
  window.JSON = {
    parse: function(sJSON) { return eval('(' + sJSON + ')'); },
    stringify: (function () {
      var toString = Object.prototype.toString;
      var isArray = Array.isArray || function (a) { return toString.call(a) === '[object Array]'; };
      var escMap = {'"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t'};
      var escFunc = function (m) { return escMap[m] || '\\u' + (m.charCodeAt(0) + 0x10000).toString(16).substr(1); };
      var escRE = /[\\"\u0000-\u001F\u2028\u2029]/g;
      return function stringify(value) {
        if (value == null) {
          return 'null';
        } else if (typeof value === 'number') {
          return isFinite(value) ? value.toString() : 'null';
        } else if (typeof value === 'boolean') {
          return value.toString();
        } else if (typeof value === 'object') {
          if (typeof value.toJSON === 'function') {
            return stringify(value.toJSON());
          } else if (isArray(value)) {
            var res = '[';
            for (var i = 0; i < value.length; i++)
              res += (i ? ', ' : '') + stringify(value[i]);
            return res + ']';
          } else if (toString.call(value) === '[object Object]') {
            var tmp = [];
            for (var k in value) {
              if (value.hasOwnProperty(k))
                tmp.push(stringify(k) + ': ' + stringify(value[k]));
            }
            return '{' + tmp.join(', ') + '}';
          }
        }
        return '"' + value.toString().replace(escRE, escFunc) + '"';
      };
    })()
  };
}

JSON 객체를 위한 더 복잡하고 잘 알려진 폴리필JSON2JSON3입니다.

스펙

스펙 상태 설명
ECMAScript 5.1 (ECMA-262)
The definition of 'JSON' in that specification.
Standard 초기 정의.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'JSON' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'JSON' in that specification.
Draft  

브라우저 호환성

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) 3.5 (1.9.1) 8.0 10.5 4.0
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) 1.0 (1.0) (Yes) (Yes) (Yes)

참조

문서 태그 및 공헌자

 이 페이지의 공헌자: Netaras, MexieAndCo
 최종 변경: Netaras,