Veja o que é "JSON" em outros dicionários. Formato JSON: exemplo e descrição Exemplo de uso de JSON

) e entre os próprios servidores (interfaces de software HTTP). O formato JSON também é adequado para armazenar estruturas dinâmicas complexas em bancos de dados relacionais ou caches de arquivos.

Como JSON é um subconjunto da sintaxe JavaScript, ele pode ser desserializado rapidamente usando a função eval() integrada. Além disso, é possível inserir funções JavaScript totalmente funcionais. No PHP, a partir da versão 5.2.0, o suporte JSON está incluído no núcleo na forma das funções json_decode() e json_encode(), que convertem os tipos de dados JSON nos tipos PHP correspondentes e vice-versa.

Sintaxe

JSON é construído em duas estruturas:

  • Um conjunto de pares chave/valor. Em vários idiomas isso é implementado como objeto, registro , estrutura , dicionário , tabela hash , lista chaveada ou matriz associativa . A chave só pode ser uma string, o valor só pode ter qualquer formato.
  • Um conjunto numerado de valores. Em muitas línguas isso é implementado como variedade, vetor, lista ou sequência.

Estas são estruturas de dados universais. Em teoria, todas as linguagens de programação modernas os suportam de uma forma ou de outra. Como o JSON é usado para trocar dados entre diferentes linguagens de programação, faz sentido construí-lo nessas estruturas.

Os seguintes formulários são usados ​​em JSON:

  • Um objeto é um conjunto não ordenado de pares nome/valor entre chaves ( ). Existe um símbolo entre o nome e o valor ": " e os pares nome/valor são separados por vírgulas.
  • Uma matriz (unidimensional) é um conjunto de valores que possuem números de série (índices). A matriz está entre colchetes. Os valores são separados por vírgulas.
  • O valor pode ser linha entre aspas duplas, número, valor verdadeiro ou falso, objeto, variedade ou valor nulo. Essas estruturas podem ser aninhadas umas nas outras.
  • Uma string é um conjunto ordenado de zero ou mais caracteres Unicode, entre aspas duplas, usando sequências de escape começando com barra invertida. Os caracteres são representados como uma string simples.
  • O nome é uma string.

Linha muito semelhante a uma string nas linguagens e Java. Número também muito semelhante a um número C ou Java, exceto que apenas o formato decimal é usado. Espaços podem ser inseridos entre quaisquer dois caracteres.

O exemplo a seguir mostra uma representação JSON de um objeto que descreve uma pessoa. O objeto tem corda campos de nome e sobrenome, um objeto que descreve o endereço e uma matriz contendo uma lista de números de telefone.

( "firstName" : "Ivan" , "lastName" : "Ivanov" , "address" : ( "streetAddress" : "Moskovskoe sh., 101, apt. 101" , "city" : "Leningrado" , "postalCode" : 101101 ) , "números de telefone" : [ "812 123-1234" , "916 123-4567" ] )

Sobre Linguagem XML tal estrutura seria mais ou menos assim:

Ivan Ivanov Moskovskoe sh., 101, apt. 101 Leningrado 101101 812 123-1234 916 123-4567

812 123-1234 916 123-4567

Comparação com YAML

Tanto funcional quanto sintaticamente, JSON é um subconjunto da linguagem YAML. Especificamente, a especificação YAML 1.2 afirma que “qualquer arquivo JSON é um arquivo YAML válido”. O analisador YAML mais comum também pode processar JSON. A especificação YAML anterior à versão 1.2 não cobria totalmente o JSON, principalmente devido à falta de suporte nativo para UTF-32 em YAML, bem como à exigência de um espaço após o delimitador de vírgula. Além disso, a especificação JSON incluía comentários de estilo /* */.

A diferença mais importante no YAML é o conjunto de extensões de sintaxe que não possuem análogos no JSON:

Relacional: YAML suporta dados relacionais: em um documento YAML, você pode se referir a uma âncora que ocorreu anteriormente em um arquivo/fluxo. Estruturas recursivas podem ser expressas desta forma.

Extensível: YAML oferece suporte a tipos de dados extensíveis além dos primitivos (ou seja, strings, números, booleanos).

Blocos: Em YAML, a sintaxe de bloco recuado está disponível; permite descrever dados estruturados sem usar símbolos desnecessários (todos os tipos de colchetes, aspas, etc.).

Esquema JSON

JSON Schema é uma das linguagens para descrever a estrutura de um documento JSON. Usa sintaxe JSON. Baseado nos conceitos de XML Schema, RelaxNG, Kwalify. JSON Schema é uma linguagem autodescritiva: quando usada, as mesmas ferramentas de serialização/desserialização podem ser usadas para processar dados e descrever sua validade.

Var o_objeto;

var http_request = novo XMLHttpRequest();

http_request.open("OBTER", url, verdadeiro);

http_request.send(nulo); http_request.onreadystatechange = function () ( if ( http_request.readyState == 4 ) ( if ( http_request.status == 200 ) ( the_object = JSON.parse ( http_request.responseText ) ; ) else ( alert( "Houve um problema com a URL." ) ; ) http_request = null ; ) ) ;

Observe que este exemplo de uso de XMLHttpRequest não é universal para todos os navegadores (para navegadores baseados em Internet Explorer, Opera, Safari e Mozilla, deve haver algumas diferenças no código). O uso de XMLHttpRequest é limitado devido à mesma política de origem: a URL da resposta à solicitação deve estar no mesmo domínio DNS do servidor onde está localizada a página que solicita a resposta. Uma alternativa é a abordagem JSONP, que envolve o uso de uma chamada de função codificada passada entre o cliente e o servidor para que o cliente possa carregar dados codificados em JSON de domínios de terceiros e notificar o chamador da conclusão, embora isso introduza alguns riscos de segurança e requisitos adicionais do servidor.

Como alternativa, o código da página pode usar elementos para solicitar dados JSON de forma assíncrona ou simplesmente . Essas abordagens eram comuns antes do suporte generalizado para XMLHttpRequest.

Você também pode usar a mesma política de origem para transferir dados JSON usando tags dinâmicas, mas isso resulta em código vulnerável. Como alternativa mais segura, foi sugerido o uso de

JSONRequest.

A técnica eval() torna o sistema vulnerável se a fonte dos dados JSON usados ​​não for confiável ( Inglês). Esses dados podem ser códigos JavaScript maliciosos para ataques de injeção de código ( Inglês). Usando esta vulnerabilidade, é possível roubar dados e falsificar autenticação. No entanto, a vulnerabilidade pode ser eliminada usando ferramentas adicionais de validação de dados. Por exemplo, antes de executar eval(), os dados recebidos de uma fonte externa podem ser validados usando expressões regulares. A RFC que define JSON sugere usar o código a seguir para verificar se ele está em conformidade com o formato JSON

Var meu_JSON_object = ! (/[^,:()\[\]0-9.\-+Eaeflnr-u \n\r\t]/ .test ( text.replace (/"(\\.|[^"\\] )*"/g , "" ) ) ) && eval("(" + texto + ")" ) ;

Como uma alternativa mais segura para eval() foi proposta novo recurso parseJSON(), que só pode processar dados JSON. Foi introduzido na versão 4 do padrão ECMAScript e é descrito no artigo "JSON: uma alternativa com baixo teor de gordura ao XML". Atualmente está disponível como uma biblioteca JavaScript e será incluída na quinta edição do ECMAScript.

JSON incorporado

Versões recentes de navegadores da web possuem suporte integrado para JSON e são capazes de processá-lo sem chamar a função eval(), o que leva ao problema descrito. O processamento JSON geralmente é mais rápido neste caso. Portanto, em junho de 2009, os seguintes navegadores tinham suporte JSON integrado:

Pelo menos cinco bibliotecas JavaScript populares usam JSON embutido quando disponível:

Falsificação de solicitação entre domínios

O mau uso de JSON torna os sites vulneráveis ​​à falsificação de solicitações entre sites (CSRF ou XSRF). Como a tag permite o uso de uma fonte que não pertence ao mesmo domínio do recurso que a utiliza, ela permite que o código seja executado sob o disfarce de dados JSON no contexto de uma página arbitrária, possibilitando o comprometimento de senhas ou outras informações confidenciais de usuários autorizados em outro site.

Isso só parece ser um problema se os dados JSON contiverem informações confidenciais que possam ser comprometidas por terceiros e se o servidor depender de uma política de origem única ( Inglês), bloqueando o acesso aos dados quando uma solicitação externa é detectada. Isto não é um problema se o servidor determinar a validade da solicitação, fornecendo dados apenas se estiverem corretos. Cookies HTTP não podem ser usados ​​para determinar isso. Excepcional usando HTTP O cookie é usado para falsificação de solicitações entre sites.

JSONP e JSONPP

JSONP (JSON Padding) ou "JSON com preenchimento" é uma extensão de JSON quando o nome de uma função de retorno de chamada é especificado como um argumento de entrada.

A tecnologia se baseia no fato de que a política de segurança do navegador permite o uso da tag para acessar servidores diferentes daquele de onde a página foi carregada.

Sem usar a tecnologia JSONP (ou seja, usando apenas codificação de dados JSON), o servidor só pode retornar dados. Por exemplo assim:

("papel": "A4", "contagem": 5)

No entanto, estes são apenas dados e não podem afetar o navegador.

Usando a técnica JSONP, o nome da função de retorno de chamada é passado para o servidor de terceiros na linha de chamada (GET):

Aqui, o parâmetro jsonp contém o nome da função de retorno de chamada parseResponse.

Agora o servidor externo example.com pode retornar o seguinte código:

ParseResponse(( "papel" : "A4" , "contagem" : 5 ) )

O código agora chama a função javascript do primeiro domínio.

A ideia foi proposta originalmente no blog MacPython em 2005 e atualmente é usada por muitos aplicativos Web 2.0, como Dojo Toolkit Applications, Google Toolkit Applications e zanox Web Services. Outras extensões deste protocolo foram propostas para incluir argumentos adicionais, como o suporte do JSONPP para serviços web S3DB.

Como o JSONP usa tags de script, as chamadas são essencialmente abertas para o mundo. Por esse motivo, o JSONP pode ser inadequado para armazenar dados confidenciais.

A ativação de tags de script de sites remotos permite que eles transmitam qualquer conteúdo do site. Se o site remoto tiver vulnerabilidades que permitam a injeção de Javascript, o site original também poderá ser afetado por elas.

JSONPP (JSON parametrizado com preenchimento) JSON parametrizado com preenchimento - desenvolvimento da ideia JSONP

JSONPP inclui a URL de origem, o nome da função que processará os dados JSON, uma linha para eval após o recebimento dos dados e uma linha para eval após terminar o processamento dos dados:

JSON_call(SRC, JSONP, JSONPP, ONLOAD);

eventualmente se vira

Resp = JSONP(SRC) ( eval(JSONPP(ans) ) ; eval(ONLOAD) ; )

Em geral, o número de parâmetros não é importante para a ideia JSONPP em si. SRC, JSONP, JSONPP (e seu processamento no lado do servidor e depois no lado do cliente) são suficientes para que seja JSONPP.

Vejamos um exemplo de trabalho com o serviço S3DB.

Função s3db_jsonpp_call (src, next_eval) ( var call = "call_" + Math .random () .toString () .replace (/\./g, "" ) ; var headID = document.getElementsByTagName ("head" ) [ 0 ] ; var script = document.createElement ("script" ) ; script.id = call script.type = "text/javascript" ; // usando json parametrizado e preenchido src = src+ "&format=json&jsonp=s3db_jsonpp&jsonpp=" + next_eval+ " &onload=remove_element_by_id("" + script.id + "")" ; script.src = src; headID.appendChild (script) ; // recupera a resposta ) function s3db_jsonpp(ans, jsonpp) ( eval(jsonpp) ; return ans ; ) função remove_element_by_id(id) ( var e = document.getElementById (id) ; e.parentNode .removeChild (e) ; return false ; )

No exemplo, a função s3db_jsonpp_call() cria um elemento de script no DOM na parte head, cujo src corresponde à chamada JSONPP.

Após receber uma resposta do servidor, s3db_jsonpp() será chamado - ele é passado nos parâmetros de chamada, como deveria ser de acordo com as regras JSONP.

Dentro de s3db_jsonpp() eval(jsonpp) será acionado e retornará o valor ans.

Chamar eval(onload) leva à execução de remove_element_by_id() com o id do script criado no cabeçalho e, finalmente, à sua exclusão, porque ele não será usado de qualquer maneira, pois o id no exemplo foi gerado aleatoriamente no início do a função s3db_jsonpp_call(). Esta chamada está na resposta do servidor.

Referências de objeto

O padrão JSON não suporta referências de objetos, mas o Dojo Toolkit demonstra como o JSON padrão pode suportar tais referências usando convenções adicionais. Em particular, o módulo dojox.json.ref fornece suporte para diversas formas de links, incluindo links circulares, múltiplos, entre documentos e preguiçosos.

Veja também Notas
  • YAML não é linguagem de marcação (YAML™) versão 1.2 (inglês) . - Rascunho de Trabalho 11/05/2008.(link inacessível - história) Recuperado em 24 de setembro de 2009.
  • . RedHanded (07 de abril de 2005). Recuperado em 25 de setembro de 2012. .
  • Json.Com Proposta de esquema JSON (link inacessível - história)
  • RFC 4627
  • JSON: a alternativa livre de gordura ao XML. Arquivado
  • json2.js (Inglês) . Arquivado do original em 12 de fevereiro de 2012. Recuperado em 24 de setembro de 2009.
  • Usando JSON incorporado.
  • JSON incorporado no IE8. Arquivado do original em 12 de fevereiro de 2012.
  • Especificações da Web suportadas no Opera Presto 2.5 (inglês) (10 de março de 2010). Arquivado do original em 12 de fevereiro de 2012. Recuperado em 29 de março de 2010.
  • Implementação ES 3.1 do objeto JSON.
  • Bilhete #4429lang=en . Arquivado do original em 12 de fevereiro de 2012.
  • Bilhete nº 4429 (22 de maio de 2009). Arquivado do original em 12 de fevereiro de 2012. Recuperado em 3 de julho de 2009.
  • Bilhete #8111lang=en . Arquivado do original em 12 de fevereiro de 2012.
  • Núcleo MooTools e mais 1.3.1. Arquivado do original em 12 de fevereiro de 2012.
  • YUI 2: utilitário JSON (1º de setembro de 2009). Arquivado do original em 12 de fevereiro de 2012. Recuperado em 22 de outubro de 2009.
  • Aprenda JSON (7 de abril de 2010). Arquivado do original em 12 de fevereiro de 2012. Recuperado em 7 de abril de 2010.
  • Jeremy Grossman Técnicas avançadas de ataque contra aplicações web usando GMail. Segurança WhiteHat. Arquivado do original em 12 de fevereiro de 2012. Recuperado em 23 de setembro de 2009.
  • from __future__ import * » JSON remoto - JSONP . Bob.pythonmac.org. Arquivado do original em 12 de fevereiro de 2012. Recuperado em 8 de setembro de 2008.
  • Almeida, Jonas (11 de junho de 2008). "JSON, JSONP, JSONPP? "(S3DB). Recuperado em 26/04/2009.
  • RIAspot JSON P para Cross Site XHR. (link inacessível - história)
  • Referência JSON no Dojo. Arquivado do original em 12 de fevereiro de 2012.
  • Ligações
    • Página inicial do formato oficial em russo
    • json.js, json2.js é uma biblioteca desenvolvida por Douglas Crockford para trabalhar com dados JSON em JavaScript. Estende um objeto com o método toJSONString, que está presente em qualquer objeto, e o converte em uma string de formato JSON.
    • json-rpc.org (inglês)
    Linguagens de marcação de documentosDocumentos de escritório

    Variáveis, arrays e objetos são uma forma familiar e conveniente de representação de dados. É costume descrever dados em linguagem Navegador JavaScript o que você não precisa fazer no idioma Servidor PHP. O formato JSON permite resumi-los em um todo e não focar na linguagem de programação. Neste caso, os dados se transformam em pares: “nome = valor”. O valor em cada um deles também pode ser uma coleção desses pares.

    É costume associar JSON a chaves e esta última é bastante justificada, já que o formato JSON = JavaScript Object Notation. Muita coisa mudou nos últimos anos particularmente dinâmicos. O que foi criado para um propósito específico muitas vezes trouxe resultados inesperados ou abriu novos horizontes.

    Troca de dados: navegador - servidor

    A tecnologia AJAX tornou-se tradicional, atualização regular de páginas inteiramente deixou de ser popular. Um visitante, ao abrir um site, inicia uma série de trocas parciais de dados, quando determinadas páginas mudam apenas no local que é relevante.

    Acredita-se que o surgimento do JSON esteja associado ao uso do AJAX, mas na verdade, a notação associativa e sua notação de objeto (características da sintaxe para descrever e usar objetos) têm uma relação muito mais relacionada com o JSON do que a troca de dados entre o navegador e o servidor.

    À medida que o conteúdo das páginas dos sites modernos se tornou verdadeiramente “massivo” (volumoso), a eficiência do formato de troca de dados adquiriu particular importância. Isso não quer dizer que o JSON tenha se tornado uma nova representação de dados, mas o fato de ele ser um elemento da sintaxe JavaScript há muito tempo é significativo.

    O uso do cirílico na nomenclatura de variáveis ​​é um fenômeno bastante inesperado (absurdo), mas funciona nas versões mais recentes do Chrome, Firefox e até Internet Explorer 11.

    Cirílico e JSON

    Claro, não adianta usar esse fenômeno completamente inesperado, lembrando com que facilidade os valores das variáveis ​​​​escritas em letras russas se transformam em jargões: o que podemos dizer sobre os nomes, principalmente os externos.

    É duvidoso que a iniciativa em nomes cirílicos seja apoiada pelo ambiente externo do navegador, com o qual tem que lidar constantemente. Mas esse fato merece atenção pela simples razão de que o formato JSON é a capacidade de escrever nomes e valores conforme o desenvolvedor desejar. Isso é importante, pois em cada tarefa a descrição da área de aplicação conforme a necessidade simplifica significativamente a depuração e reduz o número de erros.

    Não importa qual foi exatamente a base da inovação sintática - JSON -, é importante que ela dê o direito legal e a oportunidade real de definir a correspondência: “qualquer nome = qualquer valor”.

    Devemos prestar homenagem à linguagem JavaScript: o que a sintaxe fornece não obriga o desenvolvedor e não lhe impõe nada. O desenvolvedor usa livremente a sintaxe da linguagem para formar de maneira ideal um modelo de dados e um algoritmo para seu uso.

    PHP e JSON

    Ao aceitar dados no formato JSON, o servidor (via PHP, em particular) oferece a capacidade de processá-los como estão e retornar o resultado ao navegador em um formato semelhante. Matriz de origem PHP:

    • $cJSON = array ("a"=> "alfa", "b"=> "beta", "g"=> "gama").

    Converta para JSON para entrega no navegador:

    • $cJS = json_encode($cJSON).

    Resultado:

    • ("a":"alfa","b":"beta","g":"gama").

    O aninhamento mostrado na foto é permitido.

    Aqui o array gerado foi adicionado com um novo elemento “em si mesmo” com o índice automático “0” e novamente com o índice especificado “z”.

    Json_decode() converte uma string JSON em um array PHP. Resultados semelhantes podem ser alcançados manipulando funções e explode(). Em alguns casos, esta opção é preferível.

    Nível de aninhamento

    Os elementos podem ser aninhados tanto no lado do navegador quanto no lado do servidor. Na prática, o formato JSON (descrição padrão RFC 4627) fornece significativamente mais de 4 níveis de aninhamento, mas esse recurso não deve ser abusado.

    É melhor nunca ir além da suficiência razoável; isso torna o código legível, facilitando a depuração e a compreensão para outros desenvolvedores.

    JSON é comumente referido como construções de dados que mais simples que XML, compreensível para humanos e computadores ao mesmo tempo. Isso é verdade quando a quantidade de dados é pequena e o desenvolvedor escolheu o nível de aninhamento com sabedoria. Em todos os outros casos, contar o número de colchetes e entender é difícil tanto do lado do navegador quanto do lado do servidor.

    Arquivos JSON

    O uso de JSON na prática muitas vezes não se limita a uma string curta perceptível. Qualquer construção de dados é sempre pragmática. Ao mesmo tempo, o JSON pode ser usado com eficácia tanto em dados de tarefas reais (equipe da empresa) quanto para implementar dados temporários (cache de objetos).

    Equipe corporativa e formato JSON: exemplo

    Normalmente, um registro sobre uma pessoa é o sobrenome, nome, patronímico, ano de nascimento, especialidade, escolaridade, ... e alguns outros valores simples. Mesmo em empresas particularmente exigentes, o registo de uma pessoa não excederá uma dúzia ou duas áreas. Isso é perceptível e pode ser colocado em uma string do banco de dados.

    Se uma empresa emprega várias pessoas, isso é uma coisa, mas se houver dezenas de milhares, é completamente diferente. Você pode continuar usando o banco de dados, mas armazená-lo como um arquivo parece mais prático e acessível de usar.

    JSON é normal arquivo de texto. O caso da tabela de pessoal é desnecessário dizer. Você sempre pode ler. Abrir e editar também está disponível em qualquer editor de texto que não tenha o hábito de adicionar informações de serviço próprias ao conteúdo do arquivo. Em geral, *.json é texto puro tanto dentro do navegador quanto dentro do arquivo - uma string.

    A foto mostra o cache do objeto que forma a imagem, um exemplo.

    Este é um exemplo do conteúdo de um arquivo gerado por um site que presta serviços de impressão 3D colorida em canecas e produtos cerâmicos. Naturalmente, tendo esse formato JSON, decidir como abri-lo é realmente problemático. Porém, neste e em casos semelhantes não há problemas com a leitura do arquivo: o PHP lê o arquivo, analisa-o e passa-o para o navegador. Os dados alterados pelo visitante são devolvidos ao servidor e gravados.

    Nesse caso de uso, o arquivo atua como uma variável armazenada fora do código. Se necessário, a variável recebe um valor do arquivo, e se for alterada pelo visitante na caixa de diálogo disponibilizada pelo site, todas as alterações serão registradas como estão. Não há necessidade de ler e verificar o conteúdo do arquivo.

    JSON é frequentemente usado para armazenar e usar informações de serviço - esta não é uma tabela de pessoal e nem o desenvolvedor nem o visitante do site precisam vê-la.

    XML e JSON

    “Há um tempo para tudo” é um conhecimento clássico aceito como axioma antes mesmo do advento da programação. “Nada simplesmente aparece” - isso também aconteceu antes do homem escrever o primeiro programa inteligível em linguagem artificial.

    Os formatos de dados surgem de necessidades reais e baseiam-se no conhecimento adquirido. HTML tem seu próprio caminho, XML tem seu próprio caminho e JSON é uma lógica de objeto JavaScript estendida para outras linguagens. Comparar um com o outro não é a melhor coisa a fazer. Cada um na sua.

    O XML lida perfeitamente com suas tarefas e claramente não se tornará história. E o JSON foi usado até 2006, mas nem todo desenvolvedor considerava seu dever declarar certas opções para representar seus dados.

    Houve casos na prática em que programas foram escritos em BASIC que não usavam JSON como tal, mas armazenavam perfeitamente pares “nome = valor” e os disponibilizavam para os algoritmos certos no momento certo.

    Caracteres especiais (“`”, “~”, “|”, ...) e formatos de dados

    O hábito de trabalhar com arrays e objetos associativos em JavaScript torna o uso de JSON natural e conveniente. Este é um formato realmente ótimo, mas a capacidade de separar e unir, manipulando strings e arrays, tem raízes muito mais profundas.

    As funções join/split da linguagem JavaScript e implode/explode da linguagem PHP permitem o uso conveniente e eficiente de ambos os formatos Dados XML, JSON e sua própria versão. Este último costuma ser ideal, enquanto os dois primeiros são ideais para opções uso público. Se as informações estiverem sendo transferidas para outro desenvolvedor, servidor, arquivo ou banco de dados, não há melhor maneira de encontrar XML e JSON. Todos trabalham com eles, portanto a transmissão/recepção de informações dispensa comentários.

    Usando JSON no Android

    Ler e gravar dados no formato JSON no Android não é apenas a norma, mas também existem muitos objetos focados em trabalhar com esse formato de dados específico.

    Neste caso, o formato JSON é usado. Isso pode ser verdade, mas a questão não é sobre a natureza fenomenal das redes sociais, mas sobre o fato de que apresentar informações no formato “nome = valor” é conveniente tanto para programação quanto para uso. Ao contrário do “XML” estrito e complexo, este é um formato verdadeiramente amigável.

    Matrizes Associativas

    Acontece que as variáveis ​​devem ser descritas (JavaScript) ou pelo menos um valor inicial deve ser especificado (PHP). Em ambos os casos, a variável pode mudar de tipo com muita facilidade. A linguagem realiza essa conversão automaticamente se necessário.

    Mas por que a variável também não deveria mudar de nome, aparecer durante a execução do algoritmo e desaparecer quando não for mais necessária? Matrizes associativas resolvem esse problema, mas ao usar essas variáveis ​​relativamente dinâmicas, o nome da matriz e as construções sintáticas correspondentes seguirão onde forem usadas.

    Esta circunstância é especialmente pronunciada em PHP, mas você pode tolerá-la, como, de fato, com o símbolo “$” no nome da variável e a combinação “$this->” dentro do objeto. Programando em JavaScript e PHP ao mesmo tempo, no começo você fica realmente surpreso com o quão diferente tudo é, mas depois tudo se torna tão familiar e natural...

    Matriz Associativa -> JSON

    Neste exemplo, um documento *.docx é criado utilizando a biblioteca PHPOffice/PHPWord, e o array aProperties contém as propriedades deste documento (autor, empresa, título, categoria, data de criação...).

    A segunda matriz contém dados para a página:

    • orientação (paisagem ou normal);
    • dimensões verticais e horizontais;
    • recuos (margens esquerda, superior, inferior, direita);
    • cabeçalhos e rodapés.

    O documento é gerado no servidor onde está instalada a biblioteca PHPOffice/PHPWord. O site permite gerenciar os valores desses arrays usando JavaScript. O resultado no formato JSON é retornado ao servidor e utilizado em algoritmos PHP, em suas construções, ou seja, em arrays.

    Variáveis ​​Dinâmicas

    O formato JSON resolve o problema das variáveis ​​dinâmicas. Aqui você pode criar, alterar e excluir variáveis ​​sem confusão sintática desnecessária. Parece bom e é usado em JavaScript.

    Neste exemplo, a função GetOjInfo() recupera o nome do valor e o valor de um objeto. Inicialmente, o objeto string JSON atribuído à variável ojInfo possui três elementos: Nome, idade e trabalho. Um pouco mais tarde a variável Status é adicionada.

    Após o primeiro operador delete, a linha ojInfo perde o elemento age, após o segundo delete perde o elemento work. Supondo que dada linha Se houver uma seleção de variáveis ​​​​que tenham um determinado significado, então usando JSON você pode realmente criar, alterar e excluir quaisquer conjuntos delas fora do campo operacional (sintaxe) de descrição e processamento da linguagem JavaScript.

    O formato JSON não foi pensado para esta opção, mas é possível, prático e conveniente.

    JSON é um formato de texto para registro de dados.

    Ele permite representar em forma de texto um único número ou string e estruturas complexas, por exemplo, matrizes com dados. Usar este formato de gravação é conveniente porque é legível e intuitivo, ao mesmo tempo que permite armazenar estruturas de dados muito complexas. Além disso, é mais compacto que o xml, por isso, na minha opinião, é mais preferível para a troca de dados entre um navegador web e um servidor.

    Sintaxe JSON com exemplos

    O formato json geralmente é escrito em 2 variantes:

    1. Sequência de valores. Por exemplo, a sequência 10, 15 e “teste” no formato JSON ficaria assim:

    2. Registro na forma de pares chave: valor. Por exemplo:

    (“Nome completo”: “Ivanov Sergey”, “Data de nascimento”: “09/03/1975”)

    Um exemplo um pouco mais complexo:

    ("Nome completo": "Ivanov Sergey", "Endereço": ("Cidade": "Moscou", "Rua": "Pyatnitskaya", "Casa": "35") )

    Funções PHP para trabalhar com formato JSON

    • Na linguagem PHP desde a versão 5.2. existem apenas 4 funções:
    • json_decode - Decodifica uma string JSON (obtém dados de uma string no formato json)
    • json_last_error_msg – Retorna uma string indicando a mensagem de erro da última chamada para json_encode() ou json_decode()
    • json_last_error – Retorna o último erro

    Basicamente, na maior parte, apenas duas funções são usadas: json_encode e json_decode. Não vou entrar em detalhes sobre a sintaxe deles, você pode consultar php.net para mais detalhes. Exemplo de uso:

    $arr1 = matriz(0,1,2); $json_str = json_encode($arr1); echo $json_str; // gerará uma string json: $arr2 = json_decode($json_str); eco $arr2; // produzirá: 1

    Observação: ao codificar dados em russo para o formato JSON, a função json_encode converte caracteres russos em Unicode, ou seja, substitui-os por \uXXXX e, assim, a string json torna-se ilegível para humanos (mas compreensível para o navegador). Se quiser evitar a conversão para Unicode (por exemplo, ao depurar código), você pode simplesmente usar a opção JSON_UNESCAPED_UNICODE.

    Além disso, para que barras de escape não sejam adicionadas durante a codificação e para que strings com números sejam codificadas como números, você pode usar JSON_UNESCAPED_SLASHES e JSON_NUMERIC_CHECK. Como resultado, para tornar a string json legível por humanos, faremos, por exemplo, isto:

    $arr = array("fio" => "Ivanov Sergey", "idade" => "32", "vk_url" => "https://vk.com/id11111"); echo json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

    Sem usar essas opções a linha ficaria assim:

    ( "fio" : "\u0418\u0432\u0430\u043d\u043e\u0432 \u0421\u0435\u0440\u0433\u0435\u0439", "idade" : "32", "vk_url":"https:\/\ /vk.com\/id11111" )

    e usando as opções, obtemos uma linha legível:

    ( "fio": "Ivanov Sergey", "idade": 32, "vk_url": "https://vk.com/id11111" )

    Mais um ponto: se você deseja que a função json_decode retorne um array ao decodificar uma string json, basta adicionar um segundo parâmetro à função igual a true.

    $json_str = "("a":1, "b":2, "c":3 )"; $obj = json_decode($json_str); // obtém o objeto echo $obj->a; // produzirá 1 $arr = json_decode($json_str, true); // obtém um array associativo echo $arr["a"]; // irá imprimir 1

    Isso conclui minha revisão das funções PHP.

    Funções JavaScript para trabalhar com formato JSON

    Vamos começar com o fato de que o formato JSON foi originalmente inventado para a linguagem JavaScript e depois se tornou simplesmente um formato de texto separado usado em diferentes idiomas. Aparentemente, é por isso que a sintaxe JSON é muito semelhante à sintaxe para escrever objetos e arrays comuns.

    // Exemplo de array em JavaScript arr = ; alerta(arr); // exibirá 1 // Exemplo de um objeto em JavaScript obj = ( "name": "Vasya", "age": 35, "isAdmin": false ) alert(obj.name); // imprimirá "Vasya"

    Funções JavaScript usadas para converter de e para o formato JSON:

    • JSON.parse - decodificando uma string JSON (convertendo uma string em objetos e/ou arrays)
    • JSON.stringify - retorna uma representação JSON de dados (convertendo objetos e/ou arrays em uma string json)

    Um exemplo simples de decodificação de uma string json em um array com números:

    Str = ""; arr = JSON.parse(str); alerta(arr); // irá imprimir 1

    Um exemplo de conversão (serialização) de um objeto em uma string JSON:

    Obj = ( "nome": "Vasya", "idade": 35, "isAdmin": false ) alert(JSON.stringify(obj)); // será exibido ("nome":"Vasya","idade":35,"isAdmin":false)

    Ao serializar (converter) um objeto em uma string JSON, o método toJSON deste objeto é chamado, se existir. Se não houver método, todas as propriedades do objeto serão listadas. Um exemplo de conversão de um objeto com o método toJSON:

    Obj = ( "nome": "Vasya", "idade": 35, "isAdmin": false, toJSON: function() ( return this.age; ) ) alert(JSON.stringify(obj)); // imprimirá 35

    Exemplos aplicação prática Formato JSON

    Na verdade, eu pessoalmente uso o formato JSON em 2 situações principais:

    1. Transferência de dados entre o navegador e o servidor usando solicitações Ajax.

    Por exemplo, temos uma página na qual precisamos atualizar os dados sem recarregar a página. Digamos que você precise de informações com uma lista de funcionários e seus dados para serem “baixados” do servidor.

    Em JavaScript, usando jQuery, simplificamos e exibimos os dados em forma de tabela no navegador:

    $.getJSON("get-info.php").success(function(data) ( // solicitação ajax, os dados do servidor serão gravados na variável de dados htmlstr = "

    "; for (var i=0; i "Ivanov Sergey", "aniversário" => "03/09/1975"); $user_info = array ("fio" => "Alexey Petrov", "aniversário" => " 18/09.1983"); echo json_encode($user_info); sair;

    Neste exemplo, a string JSON que foi passada do servidor para o navegador ficou assim:

    [("fio":"Sergey Ivanov","aniversário":"09/03/1975"),("fio":"Alexey Petrov","aniversário":"18/09/1983")]

    Deliberadamente não mostrei a linha em forma de “árvore”, porque é transmitido exatamente desta forma. E como você pode perceber, a gravação de dados no formato JSON acabou sendo muito compacta, o que significa que a transferência desses dados do servidor para o navegador será quase instantânea.

    2. Escrever estruturas de dados complexas no banco de dados.

    Às vezes há situações em que não é aconselhável criar outra tabela no banco de dados para armazenar diversos dados. Digamos que um usuário cadastrado no site tenha a oportunidade de personalizar a cor de fundo e a cor do texto.

    Em vez de criar outra tabela para 2 configurações, você pode simplesmente criar uma coluna de texto na tabela com a lista de usuários na qual colocar os dados de configurações do usuário. Então a solicitação de atualização de configurações poderia, por exemplo, ser assim:

    ATUALIZAR usuários SET configurações = "("background-color":"#FFFFFF", "text-color":"#000000")" WHERE user_id = 10

    No futuro, tendo recebido informações da tabela de usuários, script php pode facilmente transformá-los novamente em uma matriz com configurações. Por exemplo, se a variável $user_info contém dados obtidos para um usuário da tabela users, obter um array com configurações é muito simples:

    $configurações = json_decode($user_info["configurações"], verdadeiro); echo "Cor de fundo = ".$settings["cor de fundo"]; echo "Cor do texto = ".$settings["cor do texto"];

    No formato JSON você também pode, por exemplo, registrar no banco de dados quais opções de produtos o comprador selecionou.

    ("15":["45","47"], "18":"52") // a opção 15 tem os valores 45 e 47 selecionados, e a opção 18 tem o valor 52 selecionado

    Em princípio, você pode até escrever todo o conteúdo do carrinho no formato JSON, por exemplo, assim:

    ( "user_id": 10, "session_id": "2c2l3h4ii271aojentejtdcmh3", "produtos": [ ( "product_id": 15, "opções": ( "15":, "18": 52), "quantidade": 1, "preço" : 1500 ), ( "product_id" : 16, "opções" : ( "15" : , "18" : 51 ), "quantidade" : 2, "preço" : 1000 ) ] )

    Em sua forma usual sem árvore, essa string JSON seria assim:

    ("user_id":10,"session_id":"2c2l3h4ii271aojentejtdcmh3","produtos":[("product_id":15,"opções":("15":,"18":52),,"quantidade":1 , "preço":1500),("product_id":16,"opções":("15":,"18":51),,"quantidade":2,"preço":1000)])

    Assim, como pode ser visto nos exemplos, quase todas as informações podem ser armazenadas e transmitidas no formato JSON.

    JSON (JavaScript Object Notation) é um formato simples de troca de dados fácil de ler e escrever por humanos e computadores.

    É baseado em um subconjunto da linguagem de programação JavaScript, definida no padrão ECMA-262 3ª Edição – Dezembro de 1999. JSON é um formato de texto completamente independente da linguagem de implementação, mas usa convenções familiares aos programadores de linguagens semelhantes a C, como C, C++, C#, Java, JavaScript, Perl, Python e muitas outras. Essas propriedades tornam o JSON uma linguagem ideal para intercâmbio de dados.

    • JSON é baseado em duas estruturas de dados: objeto Uma coleção de pares chave/valor. Em diferentes idiomas, este conceito é implementado como
    • , registro, estrutura, dicionário, hash, lista nomeada ou matriz associativa. variedade Uma lista ordenada de valores. Na maioria das linguagens isso é implementado como

    , vetor, lista ou sequência.

    Estas são estruturas de dados universais. Quase todas as linguagens de programação modernas os suportam de alguma forma.

    É lógico supor que um formato de dados, independente da linguagem de programação, deva ser baseado nessas estruturas. Na notação JSON fica assim:

    Objeto- um conjunto não ordenado de pares chave/valor. Um objeto começa com ( uma chave de abertura e termina com uma ) chave de fechamento. Cada nome é seguido por: dois pontos, pares chave/valor separados por vírgula.


    Variedade- uma coleção ordenada de valores. A matriz começa com um [colchete de abertura e termina com] um colchete de fechamento. linha entre aspas duplas, número Os valores são separados por vírgula. objeto ou variedade Significado


    Linha Talvez , verdadeiro, falso, nulo,. Essas estruturas podem ser aninhadas.


    Número- coleta de zero ou


    mais personagens

    Unicode entre aspas duplas, usando a barra invertida \ como caractere de escape.


    JavaScript Object Notation (JSON) é um formato de texto padrão para representar dados estruturados com base na sintaxe de objeto JavaScript. É comumente usado para transferência de dados em aplicações web (por exemplo, enviar alguns dados do servidor para o cliente para que possam ser exibidos em uma página web ou vice-versa). Você se deparará com isso com bastante frequência, portanto, neste artigo, forneceremos tudo o que você precisa para trabalhar com JSON usando JavaScript, incluindo a análise de JSON para que você possa acessar os dados dentro dele e criar JSON.

    Não, sério, o que é JSON?

    Vamos carregá-lo em nossa página e usar alguma manipulação DOM para renderizá-lo, assim:

    Recebendo JSON

    Para receber o JSON, usaremos uma API chamada XMLHttpRequest (geralmente chamada de XHR). Este é um objeto JavaScript muito útil que nos permite fazer solicitações de rede para recuperar recursos do servidor via JavaScript (por exemplo, imagens, texto, JSON e até mesmo trechos de HTML), o que significa que podemos atualizar pequenas seções de conteúdo sem precisar recarregar a página inteira . Isso resultou em páginas da web mais responsivas e parece interessante, mas infelizmente está além do escopo deste artigo ensiná-lo com muito mais detalhes.

  • Vamos começar armazenando a URL JSON que queremos receber em uma variável. Adicione o seguinte Código JavaScript: var requestURL = "https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json";
  • Para criar uma solicitação, precisamos criar uma nova instância do objeto de solicitação a partir do construtor XMLHttpRequest usando palavra-chave novo. Adicione o seguinte abaixo como sua última linha: var request = new XMLHttpRequest();
  • Agora precisamos abrir uma nova solicitação usando o arquivo . Adicione a seguinte linha: request.open("GET", requestURL);

    Isso requer pelo menos dois parâmetros – existem outros parâmetros disponíveis. Precisamos apenas de dois requisitos para este exemplo simples:

    • O método HTTP a ser usado ao fazer uma solicitação de rede. Este caso está correto, pois estamos apenas recuperando alguns dados simples.
    • A URL da solicitação é a URL do arquivo JSON que salvamos anteriormente.
  • Em seguida, adicione as duas linhas a seguir: Aqui estamos configurando JSON para que o XHR saiba que o servidor retornará JSON e que isso deve ser convertido nos bastidores em um objeto JavaScript. Em seguida enviamos a solicitação utilizando o método: request.responseType = "json"; solicitação.enviar();
  • A última parte desta seção envolve esperar por uma resposta de retorno do servidor e então manipulá-la. Adicione o seguinte código abaixo do código anterior: request.onload = function() ( var superHeroes = request.response; populateHeader(superHeroes); showHeroes(superHeroes); )
  • Aqui armazenamos a resposta à nossa solicitação (disponível na propriedade) na variável superHeroes; esta variável agora conterá um objeto JavaScript baseado em JSON! Em seguida, passamos esse objeto para duas chamadas de função - a primeira irá preenchê-lo com os dados corretos e a segunda irá criar um cartão de informações para cada herói da equipe e inseri-lo em .

    Envolvemos o código em um manipulador de eventos que é acionado quando o evento load é acionado no objeto de solicitação (consulte) - isso ocorre porque o evento load é acionado quando a resposta é retornada com êxito; fazer dessa maneira garante que request.response estará definitivamente disponível quando tentarmos fazer algo a respeito.

    Preenchimento de cabeçalho

    Agora que extraímos os dados JSON e os transformamos em um objeto JavaScript, vamos usá-los escrevendo as duas funções que vinculamos acima. Primeiro de tudo, adicione a seguinte definição de função abaixo do código anterior:

    Função populateHeader(jsonObj) ( var myH1 = document.createElement("h1"); myH1.textContent = jsonObj["squadName"]; header.appendChild(myH1); var myPara = document.createElement("p"); myPara. textContent = "Cidade natal: " + jsonObj["homeTown"] + " // Formado: " + jsonObj["formado"];

    Nomeamos o parâmetro jsonObj para nos lembrar que esse objeto JavaScript se originou de JSON. Aqui, primeiro criamos um elemento com , definimos-o como igual à propriedade squadName do objeto e, em seguida, adicionamos-o ao cabeçalho com . Realizamos então uma operação muito semelhante com um parágrafo: criamos-o, definimos o seu conteúdo de texto e adicionamo-lo ao título. A única diferença é que seu texto é especificado como uma string concatenada contendo a cidade natal e as propriedades formadas do objeto.

    Criação de cartões de informações de heróis

    Em seguida, adicione a seguinte função na parte inferior do código que cria e exibe os cartões de super-heróis:

    Função showHeroes(jsonObj) ( var heróis = jsonObj["membros"]; for (var i = 0; i< heroes.length; i++) { var myArticle = document.createElement("article"); var myH2 = document.createElement("h2"); var myPara1 = document.createElement("p"); var myPara2 = document.createElement("p"); var myPara3 = document.createElement("p"); var myList = document.createElement("ul"); myH2.textContent = heroes[i].name; myPara1.textContent = "Secret identity: " + heroes[i].secretIdentity; myPara2.textContent = "Age: " + heroes[i].age; myPara3.textContent = "Superpowers:"; var superPowers = heroes[i].powers; for (var j = 0; j < superPowers.length; j++) { var listItem = document.createElement("li"); listItem.textContent = superPowers[j]; myList.appendChild(listItem); } myArticle.appendChild(myH2); myArticle.appendChild(myPara1); myArticle.appendChild(myPara2); myArticle.appendChild(myPara3); myArticle.appendChild(myList); section.appendChild(myArticle); } }

    Primeiro, vamos armazenar a propriedade member do objeto JavaScript em uma nova variável. Esta matriz contém vários objetos que contêm informações para cada herói.

    Em seguida, usamos para percorrer cada objeto no array. Para cada um deles nós:

  • Criamos vários novos elementos: , , três

    E