Parse JSON em JavaScript? [duplicado]
var response = '{"result":true,"count":1}';
Como posso obter os valores result
e count
a partir disto?
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.
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.$.getJSON(url, function (json) {
alert(json.result);
$.each(json.list, function (i, fb) {
alert(fb.result);
});
});
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.
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
.
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
.
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(/"/g, '"');
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;
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);
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);
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;
eval('('+myObject+')')
. A única questão que posso recomendar é a lista de vários níveis em JSON.
Uma maneira fácil de o fazer:
var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
Se usar jQuery, é simples:
var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1
Se utilizar Toolkit Dojo:
require(["dojo/json"], function(JSON){
JSON.parse('{"hello":"world"}', true);
});
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.