JSON

Esta tradução está incompleta. Ajude atraduzir este artigo.

Resumo

O Objeto JSON contém métodos para parsing JavaScript Object Notation (JSON) e conversão de valores para JSON. It can't be called or constructed, and aside from its two method properties it has no interesting functionality of its own.

Descrição

JavaScript Object Notation

JSON é uma sintaxe para objetos de serialização, matrizes, números, strings, booleanos, e null. Baseia-se em sintaxe Javascript, mas é distinta: alguns Javascript não é JSON, e alguns JSON não é Javascript. Veja também JSON: O subconjunto de Javascript que não é.

JavaScript and JSON differences
JavaScript type JSON differences
Objects and Arrays Property names must be double-quoted strings; trailing commas are forbidden.
Numbers Leading zeros are prohibited; a decimal point must be followed by at least one digit.
Strings

Only a limited sets of characters may be escaped; certain control characters are prohibited; the Unicode line separator (U+2028) and paragraph separator (U+2029) characters are permitted; strings must be double-quoted. See the following example where JSON.parse() works fine and a SyntaxError is thrown when evaluating the code as JavaScript:

var code = '"\u2028\u2029"';
JSON.parse(code); // works fine
eval(code); // fails

The full JSON syntax is as follows:

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

Espaços em branco insignificante pode estar presente em qualquer lugar exceto dentro de um JSONNumber (números devem conter nenhum espaço em branco) ou JSONString (onde ele é interpretado como o personagem correspondente na seqüência, ou faria com que um erro). O caractere de tabulação (U+0009), retorno de carro (U+000D), alimentação de linha (U+000A), e espaço (U+0020) caracteres são os únicos caracteres em branco válidos.

Methods

JSON.parse()
Analisar uma seqüência como JSON, opcionalmente transformar o valor produzido e suas propriedades, e retornar o valor.
JSON.stringify()
Retorna uma string JSON correspondente ao valor especificado, incluindo, opcionalmente, apenas determinados propriedades ou substituir valores de propriedade de uma maneira definida pelo usuário.

Polyfill

O objeto JSON não é suportado em navegadores mais antigos. Você pode contornar isso inserindo o seguinte código no início de seus scripts, permitindo o uso de JSON objeto de implementações que não suportam nativamente-lo (como Internet Explorer 6).

O algoritmo a seguir é uma imitação do objeto nativo 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) + '"';
      };
    })()
  };
}

Especificações

Specification Status Comment
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  

Navegador compatível

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)

Baseado em Kangax's compat table.

Veja também

Etiquetas do documento e colaboradores

 Colaboradores desta página: Jeremie, deyvid0123, jessicatenca, markokr
 Última atualização por: Jeremie,