Parse JSON em JavaScript? [duplicado]

Esta pergunta já tem uma resposta:
Quero analisar uma string JSON em JavaScript. A resposta é algo como

var response = '{"result":true,"count":1}';
Como posso obter os valores result e count a partir disto?

Author: Taryn, 2011-02-08

16 answers

A maioria dos navegadores suporta JSON.parse(), que é definida na 5ª edição do ECMA-262 (a especificação em que o JavaScript se baseia). A sua utilização é simples:

var json = '{"result":true,"count":1}',
    obj = JSON.parse(json);

alert(obj.count);

/* or ES6 */

const json = '{"result":true,"count":1}' || {};
const { result, count } = JSON.parse(json);
alert(result);
alert(count);

Para os navegadores que não o conseguem implementar usando json2.js .

Como indicado nos comentários, se já estiver a usar o jQuery, existe uma função $.parseJSON que mapeia para JSON.parse se disponível ou uma forma de eval em navegadores mais antigos. No entanto, isto realiza verificações adicionais e desnecessárias, que são também realizado por JSON.parse, por isso, para o melhor desempenho geral, eu recomendaria usá-lo assim:

var json = '{"result":true,"count":1}',
    obj = JSON && JSON.parse(json) || $.parseJSON(json);

Isto irá assegurar-lhe a utilização imediata de native JSON.parse, em vez de ter o jQuery a efectuar verificações de sanidade no texto antes de o passar para a função de análise de análise nativa.

 1875
Author: Andy E, 2018-09-12 10:13:09

Em primeiro lugar, tens de ter a certeza que o código JSON é válido.

Depois disso, eu recomendaria usar uma biblioteca JavaScript como jQuery ou protótipo, se você puder, porque essas coisas são bem tratadas nessas bibliotecas.

Por outro lado, se você não quiser usar uma biblioteca e você pode atestar a validade do objeto JSON, eu simplesmente me moldar a seqüência de caracteres em uma função anônima e usar a função eval.

Isto não é recomendado se obtendo o objeto JSON de outra fonte que não é absolutamente confiável porque a função eval permite o código renegado, se você quiser.

Aqui está um exemplo de usar a função eval:

var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);

Se controlar o navegador que está a ser usado ou não estiver preocupado com pessoas com um navegador mais antigo, pode sempre usar o JSON.método de análise.

Esta é realmente a solução ideal para o futuro.
 90
Author: Clarence Fredericks, 2017-02-28 11:17:39
Se está a receber isto de um site externo, pode ser útil usar o getJSON do jQuery. Se é uma lista, podes passar por ela com $.cada
$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});
 49
Author: milestyle, 2018-03-30 21:30:42

Se quiser utilizar JSON 3 para navegadores mais antigos, pode carregá-lo condicionalmente com:

<script>
    window.JSON || 
    document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>

Agora o objecto padrão window.JSON está disponível para si independentemente do navegador que um cliente esteja a executar.

 32
Author: huwiler, 2018-03-30 21:30:57

O seguinte exemplo vai deixar claro:

var jsontext   = '{"name":"x","age":"11"}';
var getContact = JSON.parse(jsontext);
document.write(getContact.name + ", " + getContact.age);

// Output: x, 11

Ou

Também pode usar a função eval. O exemplo seguinte é usar a função eval:

var jsontext   = '{"name":"x","age":"11"}';
var getContact = eval('(' + jsontext + ')');
document.write(getContact.name + ", " + getContact.age);

// Output: x, 11

Uma vez que a função JSON.parse é mais segura e executa mais depressa do que a função eval, recomendo que use a função JSON.parse.

 31
Author: Joke_Sense10, 2014-06-06 14:00:53

Você pode usar a função eval como em algumas outras respostas. Não te esqueças do aparelho extra.) Você vai saber por que quando você cavar mais fundo), ou simplesmente usar a função jQueryparseJSON:

var response = '{"result":true , "count":1}'; 
var parsedJSON = $.parseJSON(response);

Ou

Pode usar este código abaixo.

var response = '{"result":true , "count":1}';
var jsonObject = JSON.parse(response);

E pode aceder aos campos usando jsonObject.result e jsonObject.count.

 25
Author: Teja, 2014-06-06 13:59:43

Se passar uma variável de cadeia de caracteres (uma cadeia de caracteres JSON bem formada) para JSON.analisar a partir do MVC @Viewbag que tem o doublequote,'"', como aspas, você precisa processá-lo antes do JSON.processar (jsonstring)

    var jsonstring = '@ViewBag.jsonstring';
    jsonstring = jsonstring.replace(/&quot;/g, '"');  
 25
Author: Jenna Leaf, 2017-05-25 21:12:57

A maneira mais fácil de usar parse() Método:

var response = '{"a":true,"b":1}';
var JsonObject= JSON.parse(response);

Este é um exemplo de como obter valores:

var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;
 23
Author: Jorgesys, 2016-02-20 00:58:42

Sem usar uma biblioteca pode usar eval - o único tempo que deve usar. Mas é mais seguro usar uma biblioteca.

Eg...

var response = '{"result":true , "count":1}';

var parsedJSON = eval('('+response+')');

var result=parsedJSON.result;
var count=parsedJSON.count;

alert('result:'+result+' count:'+count);
 19
Author: El Ronnoco, 2011-02-08 16:45:37
JSON.parse () converte qualquer cadeia de JSON passada para a função, para um objeto JSON.

Para uma melhor compreensão, carregue em F12 para abrir o elemento inspeccionar do seu navegador, e vá à consola para escrever os seguintes comandos:

var response = '{"result":true,"count":1}'; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.

Agora execute o comando:

console.log(JSON.parse(response));

Obterás a saída como Objecto {resultado: true, count: 1}.

Para usar esse objecto, pode atribuí-lo à variável, digamos ... obj:
var obj = JSON.parse(response);

Agora usando obj e ponto(.) operator you can access properties of the JSON Object.

Tente executar o comando

console.log(obj.result);
 19
Author: Pushkar Kathuria, 2017-05-25 21:11:55

Se gostou de

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

Você pode acessar os elementos JSON por JsonObject com (.) ponto:

JsonObject.result;
JsonObject.count;
 17
Author: user5676965418, 2017-05-25 21:10:07
Pensei que ia resultar. Mas dependendo dos navegadores, pode valer a pena usar eval('('+myObject+')'). A única questão que posso recomendar é a lista de vários níveis em JSON.
 11
Author: ha9u63ar, 2013-04-04 10:38:37

Uma maneira fácil de o fazer:

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
 9
Author: yassine, 2017-05-25 21:13:11

Se usar jQuery, é simples:

var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1
 4
Author: legendJSLC, 2014-06-06 14:01:18

Se utilizar Toolkit Dojo:

require(["dojo/json"], function(JSON){
    JSON.parse('{"hello":"world"}', true);
});
 4
Author: Brendon-Van-Heyzen, 2017-05-25 21:13:49

Como mencionado por muitos outros, a maioria dos navegadores suporta JSON.parse e JSON.stringify.

Agora, eu também gostaria de acrescentar que, se você estiver usando AngularJS (que eu recomendo), então ele também fornece a funcionalidade que você precisa:

var myJson = '{"result": true, "count": 1}';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)
Eu só queria adicionar as coisas sobre AngularJS para fornecer outra opção. NOTE que AngularJS não suporta oficialmente Internet Explorer 8 (e versões mais antigas, para que a matéria), embora através da experiência a maioria das coisas parece trabalhar muito bem.
 4
Author: user2359695, 2017-05-25 21:14:40