O que é JSON e por que eu o usaria?

542

Procurei na wikipedia e pesquisei no Google e li a documentação oficial, mas ainda não cheguei ao ponto de realmente entender o que é o JSON e por que o usaria.

Estou construindo aplicativos usando PHP, MySQL e Javascript / HTML há algum tempo, e se o JSON puder fazer algo para facilitar minha vida ou melhor meu código ou melhor minha interface de usuário, gostaria de saber sobre isso. Alguém pode me dar uma explicação sucinta?

Ben
fonte
2
JSON é um subconjunto do YAML yaml.org
Brad Gilbert
15
copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it este é um exemplo simples agradável de uso
Tom
1
Leia também sobre o I-JSON: tbray.org/ongoing/When/201x/2015/03/23/i-json
Christophe Roussy
1
+ Brad Gilbert Na verdade - é o seu próprio modo de expressar dados, e é semelhante ao JSON apenas porque ambos expressam objetos como seqüências de caracteres (semelhante a XML ou plists ou muitos outros), mas JSON é melhor para gravação de máquina e YAML para gravação humana .
Ben Aubin

Respostas:

649

JSON (JavaScript Object Notation) é um formato leve usado para troca de dados. É baseado em um subconjunto da linguagem JavaScript (a maneira como os objetos são criados em JavaScript). Conforme declarado no MDN , alguns JavaScript não são JSON e alguns JSON não são JavaScript.

Um exemplo de onde isso é usado são as respostas dos serviços da web. Antigamente, os serviços da Web usavam XML como formato de dados primário para a transmissão de dados, mas desde que o JSON apareceu ( o formato JSON é especificado na RFC 4627 por Douglas Crockford ), ele era o formato preferido, porque é muito mais leve

Você pode encontrar muito mais informações no site oficial do JSON .

JSON é construído em duas estruturas:

  • Uma coleção de pares nome / valor. Em vários idiomas, isso é realizado como um objeto, registro, estrutura, dicionário, tabela de hash, lista de chaves ou matriz associativa.
  • Uma lista ordenada de valores. Na maioria dos idiomas, isso é realizado como uma matriz, vetor, lista ou sequência.

Estrutura JSON



Diagrama de objeto JSON

Diagrama de matriz JSON

Diagrama de valor JSON

Diagrama de cadeia JSON

Diagrama numérico JSON

Aqui está um exemplo de dados JSON:

{
     "firstName": "John",
     "lastName": "Smith",
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": 10021
     },
     "phoneNumbers": [
         "212 555-1234",
         "646 555-4567"
     ]
 }

JSON em JavaScript

JSON (em Javascript) é uma string!

As pessoas geralmente assumem que todos os objetos Javascript são JSON e que JSON é um objeto Javascript. Isto está incorreto.

Em Javascript nãovar x = {x:y} é JSON , este é um objeto Javascript . Os dois não são a mesma coisa. O equivalente JSON (representado na linguagem Javascript) seria var x = '{"x":"y"}'. xé um objeto do tipo string e não um objeto por si só. Para transformar isso em um objeto Javascript pleno direito você deve primeiro analisá-lo, var x = JSON.parse('{"x":"y"}');, xagora é um objeto, mas isso não é JSON mais.

Consulte Objeto Javascript Vs JSON


Ao trabalhar com JSON e JavaScript, você pode tentar usar a evalfunção para avaliar o resultado retornado no retorno de chamada, mas isso não é sugerido, pois existem dois caracteres (U + 2028 e U + 2029) válidos no JSON, mas não no JavaScript (leia mais sobre isso aqui ).

Portanto, é preciso sempre tentar usar o script de Crockford que verifica um JSON válido antes de avaliá-lo. O link para a explicação do script é encontrado aqui e aqui está um link direto para o arquivo js. Atualmente, todos os principais navegadores têm sua própria implementação para isso.

Exemplo de como usar o analisador JSON (com o json do snippet de código acima):

//The callback function that will be executed once data is received from the server
var callback = function (result) {
    var johnny = JSON.parse(result);
    //Now, the variable 'johnny' is an object that contains all of the properties 
    //from the above code snippet (the json example)
    alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};

O analisador JSON também oferece outro método muito útil stringify,. Este método aceita um objeto JavaScript como parâmetro e retorna uma sequência com o formato JSON. Isso é útil para quando você deseja enviar dados de volta ao servidor:

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

Os dois métodos acima ( parsee stringify) também usam um segundo parâmetro, que é uma função que será chamada para cada chave e valor em todos os níveis do resultado final, e cada valor será substituído pelo resultado da sua função inserida. (Mais sobre isso aqui )

Btw, para todos vocês que pensam que o JSON é apenas para JavaScript, confira este post que explica e confirma o contrário.


Referências

Andreas Grech
fonte
1
Independentemente da maneira como as informações são serializadas, você terá um analisador, certo? Portanto, quem se importa com o formato usado para transmitir dados se seus detalhes de implementação forem abstraídos.
Tom Lehman
6
Bem, na verdade, se você estiver transmitindo dados para o cliente e o servidor, acho muito importante ter cuidado com o tamanho da resposta.
Andreas Grech
9
Para o pedante, há um par de caracteres que JSON lida de forma diferente do JavaScript, impedindo-o de ser um subconjunto estrito: timelessrepo.com/json-isnt-a-javascript-subset
Jeremy Banks
Quando você diz que é mais leve que XML, está se referindo ao tamanho do arquivo ou que leve tem um significado espacial na codificação?
whatahitson
1
Então você substituiria XML por JSON? É isso o que você está dizendo? Se sim ... Ótimo, xml é um pesadelo.
James111
66

O conceito explicado - sem código ou jargão técnico

O que é JSON? - Como expliquei à minha esposa TM

Eu: “É basicamente uma maneira de se comunicar com alguém por escrito ... mas com regras muito específicas.

Esposa: sim ....?

Eu: no inglês prosaico, as regras são bastante soltas: assim como nas lutas de jaula. Não é assim com JSON. Existem muitas maneiras de descrever algo:

• Exemplo 1: Nossa família tem 4 pessoas: você, eu e 2 filhos.

• Exemplo 2: Nossa família: você, eu, garoto1 e garoto2.

• Exemplo 3: Família: [você, eu, garoto1, garoto2]

• Exemplo 4: temos 4 pessoas em nossa família: mãe, pai, garoto1 e garoto2.

Esposa: Por que eles não usam apenas inglês comum?

Eu: Eles sim, mas lembre-se de que estamos lidando com computadores. Um computador é estúpido e não será capaz de entender frases. Portanto, precisamos ser realmente específicos quando os computadores estão envolvidos, caso contrário, eles ficam confusos. Além disso, o JSON é uma maneira bastante eficiente de se comunicar, de modo que a maioria das coisas irrelevantes é cortada, o que é bastante bonito. Se você queria comunicar nossa família a um computador, uma maneira de fazê-lo é assim:

{
                "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
}

…… e isso é basicamente JSON. Mas lembre-se, você DEVE seguir as regras gramaticais do JSON. Se você violar essas regras, o computador simplesmente não entenderá (ou seja, analisará) o que você está escrevendo.

Esposa: Então, como eu escrevo em Json?

Uma boa maneira seria usar um serializador json - que é uma biblioteca que faz o trabalho pesado para você.

Sumário

JSON é basicamente uma maneira de comunicar dados a alguém, com regras muito, muito específicas. Usando pares e matrizes de valor-chave. Este é o conceito explicado, neste ponto vale a pena ler as regras específicas acima.

BKSpurgeon
fonte
48

Em resumo - o JSON é uma maneira de serializar de tal maneira que se torna um código JavaScript. Quando executado (com avaliação ou não), esse código cria e retorna um objeto JavaScript que contém os dados que você serializou. Está disponível porque o JavaScript permite a seguinte sintaxe:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

Você pode usar isso para vários propósitos. Por um lado, é uma maneira confortável de passar dados do servidor back-end para o seu código JavaScript. Portanto, isso geralmente é usado no AJAX.

Você também pode usá-lo como um mecanismo de serialização independente, que é mais simples e ocupa menos espaço que XML. Existem muitas bibliotecas que permitem serializar e desserializar objetos em JSON para várias linguagens de programação.

Vilx-
fonte
31

Em resumo, é uma notação de script para a transmissão de dados. De certa forma, uma alternativa ao XML, suportando nativamente tipos de dados básicos, matrizes e matrizes associativas (pares nome-valor, chamados Objetos, porque é isso que eles representam).

A sintaxe é aquela usada no JavaScript e o próprio JSON significa "Notação de Objeto JavaScript". No entanto, tornou-se portátil e é usado em outros idiomas também.

Um link útil para detalhes está aqui:

http://secretgeek.net/json_3mins.asp

mson
fonte
19

O formato JSON é frequentemente usado para serializar e transmitir dados estruturados por uma conexão de rede. É usado principalmente para transmitir dados entre um servidor e um aplicativo da Web, servindo como uma alternativa ao XML.

Pinakin Nayi
fonte
16

JSON é uma notação de objeto JavaScript. É uma maneira muito mais compacta de transmitir conjuntos de dados através de conexões de rede em comparação com XML. Sugiro que o JSON seja usado em qualquer aplicativo semelhante ao AJAX, em que o XML seria a opção "recomendada". A verbosidade do XML aumentará o tempo de download e aumentará o consumo de largura de banda ($$$). Você pode obter o mesmo efeito com o JSON e sua marcação é quase exclusivamente dedicada aos dados em si e não à estrutura subjacente.

Nolte
fonte
11

a resposta curta comum é: se você estiver usando o AJAX para fazer solicitações de dados, poderá facilmente enviar e retornar objetos como cadeias JSON. As extensões disponíveis para suporte a Javascript toJSON () chama todos os tipos de javascript para enviar dados ao servidor em uma solicitação AJAX. As respostas AJAX podem retornar objetos como cadeias JSON que podem ser convertidas em objetos Javascript por uma chamada simples de avaliação, por exemplo, se a função AJAX retornar alguma função AAaxxFunctionCallReturningJson

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

você poderia escrever em Javascript

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

O JSON também pode ser usado para cargas úteis de serviços da web e outros, mas é realmente conveniente para os resultados do AJAX.

  • Atualização (dez anos depois): não faça isso, use JSON.parse
Steven A. Lowe
fonte
1
Com eval (), qualquer coisa seria avaliada. é um risco de segurança.
Thomas Weller
@ThomasWeller sim, esta resposta é antiga, eu iria com JSON.parse agora, obrigado!
Steven A. Lowe
8

Eu gosto do JSON principalmente porque é muito conciso . Para o conteúdo da web que pode ser compactado com gzip, isso não é necessariamente um grande problema (por isso, x x html é tão popular). Mas há ocasiões em que isso pode ser benéfico.

Por exemplo, em um projeto, eu estava transmitindo informações que precisavam ser serializadas e transmitidas via XMPP . Como a maioria dos servidores limita a quantidade de dados que você pode transmitir em uma única mensagem, achei útil usar o JSON sobre a alternativa óbvia, XML.

Como um bônus adicional, se você conhece Python ou Javascript, já conhece o JSON e pode interpretá-lo sem muito treinamento.

Jason Baker
fonte
8

O que é JSON?

JavaScript Object Notation (JSON) é um formato leve de intercâmbio de dados inspirado nos literais de objetos de JavaScript.

Os valores JSON podem consistir em:

objetos (coleções de pares nome-valor) matrizes (listas ordenadas de valores) cadeias (entre aspas duplas) números verdadeiros, falsos ou nulos

JSON é independente de idioma.

JSON com PHP?

Após o PHP Versão 5.2.0, a extensão JSON é decodificada e codifica as funcionalidades como padrão.

Json_encode - retorna a representação JSON dos valores Json_decode - Decodifica a sequência JSON Json_last_error - Retorna o último erro ocorrido.

Sintaxe e regras JSON?

A sintaxe JSON é derivada da sintaxe da notação de objeto JavaScript:

Os dados estão em pares nome / valor Os dados são separados por vírgulas Aparelhos encaracolados mantêm objetos Parênteses retos retêm matrizes

Elangovan
fonte
4

Temos que fazer um projeto na faculdade e enfrentamos um grande problema, chamado de mesma política de origem. Entre outras coisas, o método XMLHttpRequest do Javascript não pode fazer solicitações para domínios que não sejam o domínio em que o site está.

Por exemplo, você não pode fazer uma solicitação para www.otherexample.com se o site estiver em www.example.com. JSONRequest permite isso, mas você obterá resultado no formato JSON se esse site permitir (por exemplo, ele possui um serviço da web que retorna mensagens em JSON). Esse é um problema em que você poderia usar JSON, talvez.

Aqui está algo prático: Yahoo JSON

gljivar
fonte
4

A diferença entre JSON e sintaxe convencional seria a seguinte (em Javascript)

Convencional

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","[email protected]");

Com JSON

se usarmos JSON, podemos definir de maneira diferente como

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});

O importante é lembrar que, se tivermos que construir a classe ou modal "Employee" com 100 elementos sem o método JSON, precisamos analisar tudo ao criar a classe. Porém, com o JSON, podemos definir os objetos embutidos apenas quando um novo objeto para a classe é definido.

portanto, esta linha abaixo é a maneira de fazer as coisas com JSON (apenas uma maneira simples de definir as coisas)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});
Ganesh Vellanki
fonte
2
Isso não é exatamente JSON - é um objeto JavaScript (não JSON)
Ben Aubin
4

Às vezes, o tecnicismo é dado onde não é necessário, e embora muitas das principais respostas votadas sejam exatamente técnicas e específicas, pessoalmente não acho que sejam mais fáceis de entender ou sucintas, como pode ser encontrado na Wikipedia ou em documentação oficial.

A maneira como gosto de pensar no JSON é exatamente o que é - uma linguagem dentro de um mundo de diferentes línguas. No entanto, a diferença entre JSON e outros idiomas é que "todos" "falam" JSON, junto com seu "idioma nativo".

Usando um exemplo do mundo real, vamos fingir que temos três pessoas. Uma pessoa fala igbo como sua língua nativa. A segunda pessoa gostaria de interagir com a primeira pessoa, no entanto, a primeira pessoa fala ioruba como sua primeira língua.

O que podemos fazer?

Felizmente, a terceira pessoa no nosso exemplo cresceu falando Inglês, mas também acontece de falar tanto Igbo e Yoruba como segundas línguas, e assim pode agir como um intermediário entre os dois primeiros indivíduos.

No mundo da programação, a primeira "pessoa" é Python, a segunda "pessoa" é Ruby e a terceira "pessoa" é JSON, que por acaso consegue "traduzir" Ruby para Python e vice-versa! Agora, obviamente, essa analogia não é perfeita, mas, como alguém bilíngue, acredito que seja uma maneira fácil de ver como o JSON interage com outras linguagens de programação.

Jerel
fonte
2

É muito simples. JSON significa Java Script Object Notation. Pense nisso como uma alternativa ao uso de XML para transferir dados entre componentes de software.

Por exemplo, recentemente escrevi vários serviços da Web que retornaram JSON, e alguns desenvolvedores de Javascript escreveram códigos que chamavam os serviços e consumiam as informações retornadas nesse formato.

Jon
fonte
2

JSON (notação de objeto Javascript) é um formato de dados leve para troca / transferência de dados. Seu par de valores-chave é o JavaScript. Para a API REST, é amplamente utilizado para transferência de dados do servidor para o cliente. Atualmente, muitos dos sites de mídia social estão usando isso. Embora eu não veja isso tão robusto quanto XML em relação aos tipos de dados. XML possui tipos de dados muito ricos e XSD. JSON está faltando um pouco nisso.

Para a mesma quantidade de dados de string, o JSON será mais leve se comparado ao XML, pois o XML possui todas as tags de abertura e fechamento, etc.

Shailendra Singh
fonte
0

No contexto Java, uma razão pela qual o JSON pode querer ser usado é que ele fornece uma alternativa muito boa à estrutura de serialização do Java, que demonstrou (historicamente) estar sujeita a algumas vulnerabilidades bastante sérias.

Joshua Bloch discute isso detalhadamente no Item 85 "Preferências alternativas à serialização Java" (Java eficaz 3ª edição)

A serialização de Java foi inicialmente concebida para converter estruturas de dados em um formato que pudesse ser facilmente transmitido ou armazenado. O JSON atende a esse requisito, sem as explorações sérias mencionadas acima.

johnm
fonte
-3

Tente o seguinte código para analisar sua resposta php json: read.php

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">  
$.ajax({
    url:'index.php',
    data:{},
    type:"POST",
    success:function(result) {
        jsondecoded = $.parseJSON(result);
        $.each(jsondecoded, function(index, value) {
            $("#servers").text($("#servers").text() + " " + value.servername);
            console.log(value.start);
            console.log(value.end);
            console.log(value.id);
        });
    },
    statusCode: {
    404: function() {
      alert( "page not found" );
    }
  }
});
</script>

server.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>
amit rawat
fonte
Embora esse código possa responder à pergunta, fornecer um contexto adicional sobre como e / ou por que resolve o problema melhoraria o valor a longo prazo da resposta.
Nic3500