Análise JSON Python: um guia simples

Análise JSON Python: um guia simples

JSON (significa 'JavaScript Object Notation') é um formato baseado em texto que facilita o intercâmbio de dados entre diversos aplicativos. Por exemplo, um aplicativo escrito em C ++ rodando no Windows pode facilmente trocar dados JSON com um aplicativo escrito em python e rodando no Linux. Sua simplicidade e flexibilidade levaram ao uso generalizado nos últimos anos, especialmente em preferência aos formatos anteriores baseados em XML.





Existem bibliotecas e kits de ferramentas disponíveis para analisar e gerar JSON a partir de quase qualquer linguagem e ambiente. Este artigo se concentra em métodos e problemas decorrentes do processamento de JSON usando python.





Alguns exemplos JSON

A entidade JSON mais comum que você encontrará é um objeto : um conjunto de mapeamentos de valores-chave no formato mostrado abaixo.





eu recebo anúncios aleatórios no meu android

person.json:

{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}

Aqui está como você pode representar uma série de objetos. Nesta representação, cada item do array é um objeto. A seguir está um exemplo de salários de jogadores de beisebol.



salaries.json:

[ {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'barkele01',
'salary' : 870000
}, {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'bedrost01',
'salary' : 550000
} ]

Claro, você também pode representar uma matriz de escalares. Se parece com isso:





[
'hello',
'world',
35
]

Analisando JSON em Python

Python fornece o json módulo que pode ser usado para analisar JSON, bem como gerar JSON a partir de objetos e listas Python.

O fragmento de código a seguir mostra como abrir um arquivo JSON e carregar os dados em uma variável.





import json
with open('sample.json', 'r') as fp:
obj = json.load(fp)

Quando você tem uma string contendo os dados JSON, pode convertê-la em um objeto Python (ou lista) com o seguinte:

aplicativos de jogos de palavras grátis para Android
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Para analisar um URL JSON, você pode criar um objeto de URL usando urllib2 E use json.load () como antes.

import urllib2, json
url = urllib2.urlopen('http://site.com/sample.json')
obj = json.load(url)

Tratamento de erros

Quando o JSON tem erros, você obterá um ValueError . Você pode lidar com isso e tomar ações corretivas, se necessário.

try:
obj = json.loads('''{
'firstName': 'Alice',
'lastName: 'Hall',
'age': 35
}''')
except ValueError:
print('error loading JSON')

Analisando JSON a partir da linha de comando

Às vezes, é útil analisar JSON usando a linha de comando python, talvez para verificar se há erros ou para obter uma saída bem recuada.

cat glossary.json
# prints
{'glossary': {'GlossDiv': {'GlossList': {'GlossEntry': {'GlossDef': {'GlossSeeAlso': ['GML', 'XML'], 'para': 'A meta-markup language, used to create markup languages such as DocBook.'}, 'GlossSee': 'markup', 'Acronym': 'SGML', 'GlossTerm': 'Standard Generalized Markup Language', 'Abbrev': 'ISO 8879:1986', 'SortAs': 'SGML', 'ID': 'SGML'}}, 'title': 'S'}, 'title': 'example glossary'}}

Para obter a saída recuada do arquivo JSON acima, você pode fazer o seguinte:

python -mjson.tool glossary.json
# prints
{
'glossary': {
'GlossDiv': {
'GlossList': {
'GlossEntry': {
'Abbrev': 'ISO 8879:1986',
'Acronym': 'SGML',
'GlossDef': {
'GlossSeeAlso': [
'GML',
'XML'
],
'para': 'A meta-markup language, used to create markup languages such as DocBook.'
},
'GlossSee': 'markup',
'GlossTerm': 'Standard Generalized Markup Language',
'ID': 'SGML',
'SortAs': 'SGML'
}
},
'title': 'S'
},
'title': 'example glossary'
}
}

E aqui está como você pode carregar o objeto JSON em python e extrair apenas o que você precisa.

python -c 'import json; fp = open('glossary.json', 'r'); obj = json.load(fp); fp.close(); print(obj['glossary']['title']')
# prints
example glossary

Acessando os dados

Depois de carregar os dados JSON em uma variável python, você pode acessar os dados como faria com qualquer dicionário python (ou lista, conforme o caso). Por exemplo, os dados JSON acima podem ser acessados ​​da seguinte forma:

firstName = obj['firstName']
lastName = obj['Hall']
age = obj['age']

Tipos de dados

Os tipos de dados são determinados automaticamente a partir dos dados. Observe que era é analisado como um inteiro.

print(type(obj['firstName']), type(obj['lastName']), type(obj['age']))
# prints

A tabela de conversão a seguir é usada para converter de JSON para python.

Analisando JSON usando uma classe personalizada

Por padrão, um objeto JSON é analisado em um python dict . Às vezes, você pode precisar criar automaticamente um objeto de sua própria classe a partir dos dados JSON. Você pode fazer isso especificando um object_hook função que lida com a conversão. O exemplo a seguir mostra como.

Aqui está uma classe personalizada que representa um Pessoa .

class Person:
def __init__(self, firstName, lastName, age):
self.firstName = firstName
self.lastName = lastName
self.age = age
def __str__(self):
return '{{'firstName' = '{0}','lastName' = '{1}', 'age' = {2}}}'.format(self.firstName, self.lastName, self.age)

Uma instância desta classe é criada passando os argumentos necessários da seguinte maneira:

person = Person('Crystal', 'Newell', 27)

Para usar esta classe para criar instâncias ao analisar JSON, você precisa de um object_hook função definida da seguinte forma: A função recebe um python dict e retorna um objeto da classe correta.

def obj_creator(d):
return Person(d['firstName'], d['lastName'], d['age'])

Agora você pode usar este object_hook função ao chamar o analisador JSON.

with open('sample.json', 'r') as fp:
obj = json.load(fp, object_hook = obj_creator)
print(obj)
# prints
{'firstName' = 'Alice','lastName' = 'Hall', 'age' = 35}

Exemplos de uso de JSON

JSON é extremamente popular hoje em dia. Muitos sites e aplicativos SaaS (Software as A Service) oferecem saída JSON que pode ser consumida diretamente pelos aplicativos. Alguns dos disponíveis publicamente incluem:

  • StackOverflow / StackExchange. Aqui está um URL que retorna uma lista de perguntas no formato JSON.
  • O GitHub oferece uma API JSON em https://developer.github.com/v3/.
  • E aqui está a API do Flickr: https://developer.yahoo.com/flickr/.

Se você estiver procurando por mais exemplos de como colocá-lo em bom uso, consulte este guia para construir um bot de mídia social usando Python .

como criar textura no photoshop

Você está usando JSON para consumir ou fornecer serviços? E você está usando python em sua pilha de tecnologia? Explique nos comentários abaixo.

Compartilhado Compartilhado Tweet O email Vale a pena atualizar para o Windows 11?

O Windows foi redesenhado. Mas isso é suficiente para convencê-lo a mudar do Windows 10 para o Windows 11?

Leia a seguir
Tópicos relacionados
  • Programação
  • Programação
  • Pitão
Sobre o autor Jay Sridhar(17 artigos publicados) Mais de Jay Sridhar

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Clique aqui para se inscrever