Será JSON.parse () requerem dupla citando?

votos
12

Eu estou usando o Firefox 3.5b4.

Isto alerta [Object objeto], [object Object]:

var jsonString = '[{foo: one, bar: 1}, {foo: two, bar: 2}]';
var jsonObjects = JSON.parse(jsonString);
alert(jsonObjects);

Isto alerta uma cadeia vazia, ou seja jsonObjects é nulo.

var jsonString = [{'foo': '1', 'bar': 2}, {'foo': '3', 'bar': 4}];
var jsonObjects = JSON.parse(jsonString);
alert(jsonObjects);

O mesmo vale para nomes de propriedades não cotadas, ou seja, {foo: '1', bar: 2}.

O que está acontecendo? Estou faltando alguma coisa óbvia, ou há uma regra sobre casal e solteiro citando com JSON.parse? Todas as três versões trabalhar bem com eval.

Publicado 19/05/2009 em 15:48
fonte usuário
Em outras línguas...                            


2 respostas

votos
28

Os JSON mandatos padrão aspas duplas.

Lembre-se que JSON não é apenas "escrever um objeto JS". É uma sintaxe muito restrita que passa a ser também legível como um objeto JS. Nem toda a sintaxe JS-válido é válido JSON. Na verdade, o seu exemplo ins't JSON realmente válido, uma vez que é um array de objetos, enquanto a norma especifica que a construção superior deve ser um objeto.

Claro, a maioria dos analisadores JSON são mais flexíveis, permitindo opções não-padrão (como aspas simples); mas não contar com isso.

Respondeu 19/05/2009 em 15:55
fonte usuário

votos
2

Para acrescentar ao que Javier disse, JSON limita o formato principalmente por razões de segurança (tão funções não podem ser chamados, etc.). Se você não está preocupado com a segurança, use "eval ()" do javascript função para converter a string para um objeto.

Respondeu 19/05/2009 em 15:59
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more