python-benedict/tests/stackoverflow/test_question_59176476.py

150 lines
8.5 KiB
Python

import unittest
class stackoverflow_question_59176476_test_case(unittest.TestCase):
def test_stackoverflow_question_59176476(self):
"""
https://stackoverflow.com/questions/59176476/in-python-how-to-parse-a-multi-layered-json
"""
from benedict import benedict as bdict
# data_source = 'http://legis.senado.leg.br/dadosabertos/materia/20050'
# data = bdict.from_json('http://legis.senado.leg.br/dadosabertos/materia/20050')
data_source = {
"DetalheMateria": {
"@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"@xsi:noNamespaceSchemaLocation": "http://legis.senado.leg.br/dadosabertos/dados/DetalheMateriav5.xsd",
"Metadados": {
"Versao": "03/12/2019 21:36:18",
"VersaoServico": "5",
"DataVersaoServico": "2017-02-01",
"DescricaoDataSet": "Dados básicos da matéria, incluindo autoria, norma gerada e outras informações. A partir de fevereiro de 2019, os requerimentos de comissões permanentes passam a ser numerados com a mesma sistemática dos requerimentos das comissões temporárias, seguindo, portanto, o padrão: REQ 99/2019 - SIGLA_COMISSÃO. Dessa forma, para se buscar um requerimento de determinada comissão (com ano a partir de 2019), deve-se informar .../materia/sigla/número/ano?comissao=sigla da comissão.",
},
"Materia": {
"IdentificacaoMateria": {
"CodigoMateria": "20050",
"SiglaCasaIdentificacaoMateria": "SF",
"NomeCasaIdentificacaoMateria": "Senado Federal",
"SiglaSubtipoMateria": "PLC",
"DescricaoSubtipoMateria": "PROJETO DE LEI DA CÂMARA",
"NumeroMateria": "00035",
"AnoMateria": "1988",
"DescricaoObjetivoProcesso": "Revisora",
"DescricaoIdentificacaoMateria": "PLC 35/1988",
"IndicadorTramitando": "Não",
},
"DadosBasicosMateria": {
"EmentaMateria": "DECLARA FERIADO NACIONAL O DIA 20 DE NOVEMBRO, ANIVERSARIO DA MORTE \n DE ZUMBI DOS PALMARES, CONSAGRADO PELA COMUNIDADE AFRO-BRASILEIRA \n COMO 'DIA NACIONAL DA CONSCIENCIA NEGRA.' \n ",
"IndicadorComplementar": "Não",
"DataApresentacao": "1987-12-01",
"DataLeitura": "1987-12-01",
},
"Autoria": {
"Autor": [
{
"NomeAutor": "Câmara dos Deputados",
"SiglaTipoAutor": "CAMARA",
"DescricaoTipoAutor": "Câmara dos Deputados",
"NumOrdemAutor": "1",
"IndicadorOutrosAutores": "Não",
}
]
},
"Iniciativa": {
"SiglaTipoIniciativa": "DEPUTADO",
"DescricaoTipoIniciativa": "Deputado",
"DescricaoIniciativa": "BENEDITA DA SILVA",
},
"OrigemMateria": {
"SiglaCasaOrigem": "CD",
"NomeCasaOrigem": "Câmara dos Deputados",
},
"CasaIniciadoraNoLegislativo": {
"SiglaCasaIniciadora": "SF",
"NomeCasaIniciadora": "Senado Federal",
},
"OutrosNumerosDaMateria": {
"OutroNumeroDaMateria": {
"IdentificacaoMateria": {
"SiglaCasaIdentificacaoMateria": "CD",
"NomeCasaIdentificacaoMateria": "Câmara dos Deputados",
"SiglaSubtipoMateria": "PL",
"DescricaoSubtipoMateria": "PROJETO DE LEI",
"NumeroMateria": "00293",
"AnoMateria": "1987",
},
"DescricaoTipoNumeracao": "CasaIniciadora",
}
},
"SituacaoAtual": {
"Autuacoes": {
"Autuacao": [
{
"NumeroAutuacao": "1",
"Situacao": {
"DataSituacao": "1996-01-23",
"CodigoSituacao": "28",
"SiglaSituacao": "ARQVD",
"DescricaoSituacao": "ARQUIVADA AO FINAL DA LEGISLATURA",
},
"Local": {
"DataLocal": "1996-01-23",
"CodigoLocal": "206",
"TipoLocal": "A",
"SiglaCasaLocal": "SF",
"NomeCasaLocal": "Senado Federal",
"SiglaLocal": "SSEXP",
"NomeLocal": "SUBSECRETARIA DE EXPEDIENTE",
},
}
]
}
},
"OutrasInformacoes": {
"Servico": [
{
"NomeServico": "EmendaMateria",
"DescricaoServico": "Emendas da matéria",
"UrlServico": "http://legis.senado.leg.br/dadosabertos/materia/emendas/20050?v=6",
},
{
"NomeServico": "MovimentacaoMateria",
"DescricaoServico": 'Movimentações da matéria, como tramitações, despachos e prazos.\n Evoluções:\n 14/8/2019\n - criada nova Tag "DeliberacoesMPV" para as deliberações de MPV;\n - criada nova Tag "DescricaoItemCalendario" subord',
"UrlServico": "http://legis.senado.leg.br/dadosabertos/materia/movimentacoes/20050?v=6",
},
{
"NomeServico": "RelatoriaMateria",
"DescricaoServico": "Relatoria atual e relatorias encerradas (histórico) da matéria",
"UrlServico": "http://legis.senado.leg.br/dadosabertos/materia/relatorias/20050?v=5",
},
{
"NomeServico": "TextoMateria",
"DescricaoServico": 'Textos da matéria. \n Evoluções da versão: \n 28/8/2019 - incluída a tag "AutoriaTexto", sob a tag "Texto".',
"UrlServico": "http://legis.senado.leg.br/dadosabertos/materia/textos/20050?v=5",
},
{
"NomeServico": "VotacaoMateria",
"DescricaoServico": "Votações da matéria",
"UrlServico": "http://legis.senado.leg.br/dadosabertos/materia/votacoes/20050?v=5",
},
{
"NomeServico": "VotacoesComissao",
"UrlServico": "http://legis.senado.leg.br/dadosabertos/votacaoComissao/materia/PLC/00035/1988?v=1",
},
]
},
"UrlGlossario": "http://legis.senado.leg.br/dadosabertos/glossario/lista",
},
}
}
data = bdict(data_source)
# once your url will return a valid json you could just do:
# data = bdict.from_json('http://legis.senado.leg.br/dadosabertos/materia/20050')
author = bdict(data[["DetalheMateria", "Materia", "Autoria", "Autor"]][0])
author_name = author["NomeAutor"]
# print(author_name)
self.assertEqual(author_name, "Câmara dos Deputados")