Eu tenho um arquivo JSON que é uma bagunça que eu quero imprimir - qual é a maneira mais fácil de fazer isso em python? Eu sei que o PrettyPrint pega um "objeto", que eu acho que pode ser um arquivo, mas não sei como passar um arquivo - apenas usar o nome do arquivo não funciona.
python
json
formatting
pretty-print
Colleen
fonte
fonte
json.loads()
e imprima esse dicionário resultante. Ou simplesmente pule para a seção Impressão bonita da documentaçãojson
do Python para .<your_file.js python -mjson.tool
como no link do @ ed?Respostas:
O
json
módulo já implementa algumas impressões bonitas básicas com oindent
parâmetro:Para analisar um arquivo, use
json.load()
:fonte
print json.dumps(your_json_string, indent=4)
print(json.dumps(json.loads(your_json_string), indent=2))
caso contrário, apenas me mostrou uma string escapouVocê pode fazer isso na linha de comando:
(como já mencionado nos comentários da pergunta, obrigado a @Kai Petzke pela sugestão de python3).
Na verdade, python não é minha ferramenta favorita no que diz respeito ao processamento json na linha de comando. Para uma impressão bonita e simples, tudo bem, mas se você quiser manipular o json, pode ficar complicado demais. Em breve, você precisará escrever um arquivo de script separado; poderá acabar com mapas cujas chaves são u "some-key" (python unicode), o que torna a seleção de campos mais difícil e realmente não vai na direção de -impressão.
Você também pode usar jq :
e você obtém cores como um bônus (e muito mais fácil de expandir).
Adendo: Há alguma confusão nos comentários sobre o uso de jq para processar arquivos JSON grandes, por um lado, e a existência de um programa jq muito grande, por outro. Para imprimir bonito um arquivo que consiste em uma única entidade JSON grande, a limitação prática é a RAM. Para imprimir bonito um arquivo de 2 GB que consiste em uma única matriz de dados do mundo real, o "tamanho máximo do conjunto de residentes" necessário para a impressão bonita era de 5 GB (seja usando jq 1.5 ou 1.6). Observe também que o jq pode ser usado no python depois
pip install jq
.fonte
jq '' < some.json
python3 -m json.tool <IN >OUT
, pois isso mantém a ordem original dos campos nos dicionários JSON. O interpretador python versão 2 classifica os campos em ordem alfabética crescente, o que geralmente não é o que você deseja.Você pode usar o módulo interno pprint (https://docs.python.org/3.6/library/pprint.html) .
Como você pode ler o arquivo com dados json e imprimi-lo.
fonte
Pycementize + Python json.tool = Impressão bonita com destaque de sintaxe
Pycementize é uma ferramenta matadora. Veja isso.
Combino python json.tool com pycementize
Consulte o link acima para obter instruções de instalação de pycementize.
Uma demonstração disso está na imagem abaixo:
fonte
-g
não está realmente funcionando;) Como a entrada vem do stdin, o pycementize não é capaz de dar um bom palpite. Você precisa especificar explicitamente o lexer:echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
Use esta função e não se preocupe, lembrando se o seu JSON é uma
str
oudict
outra vez - basta olhar para a bonita estampa:fonte
Certa vez, escrevi uma
prettyjson()
função para produzir uma saída bonita. Você pode pegar a implementação neste repositório .A principal característica dessa função é tentar manter o ditado e listar os itens em uma linha até que um certo
maxlinelength
seja alcançado. Isso produz menos linhas de JSON, a saída parece mais compacta e fácil de ler.Você pode produzir esse tipo de saída, por exemplo:
UPD Dez'19: Coloquei o código em um repositório separado , corrigi alguns bugs e fiz alguns outros ajustes.
fonte
Para poder imprimir da linha de comando e ter controle sobre o recuo, etc., você pode configurar um alias semelhante a este:
E, em seguida, use o alias de uma destas maneiras:
fonte
Use pprint: https://docs.python.org/3.6/library/pprint.html
print()
comparado compprint.pprint()
fonte
pprint
não produz um documento JSON válido.Aqui está um exemplo simples de impressão bonita de JSON no console de uma maneira agradável em Python, sem exigir que o JSON esteja no seu computador como um arquivo local:
fonte
Ele funciona para exibi-lo ou salvá-lo em um arquivo.
fonte
Eu acho que é melhor analisar o json antes, para evitar erros:
fonte
Você pode tentar pprintjson .
Instalação
Uso
Imprima JSON de um arquivo usando a CLI pprintjson.
Imprima JSON a partir de um stdin usando a CLI pprintjson.
Imprima JSON a partir de uma string usando a CLI pprintjson.
JSON bonito da impressão de uma corda com um recuo de 1.
Imprima JSON a partir de uma string e salve a saída em um arquivo output.json.
Resultado
fonte
Está longe de ser perfeito, mas faz o trabalho.
você pode aprimorá-lo, adicionar recuo e assim por diante, mas se você quiser apenas ler um json mais limpo, esse é o caminho a seguir.
fonte