Entrar    Registrar

Json+Python

Sintaxe e uso de Scripts e Marcadores

Moderadores: guest2003, 51

  • Autor
    Mensagem

Json+Python

Mensagempor fabim » 05 Jan 2021 15:49

Olá pessoal!!!

Estou aqui a dois dias batendo a cabeça procurando uma forma de utilizar o json de forma cega.

O que eu quero dizer:

Imagine o seguinte arquivo data_config.json com a seguinte extrutura:

Código: Selecionar todos
{ "CALIB":{
  "RPM"  : 2.3,
  "TMP"  : 60000,
  "TSET": [2.5, 3.7]
  },
  "SETUP":{
   "RPM"  : 7500,
  "TMP"  : 3.5,
  "TSET": [1.0, 1.67]
  }
 }


Com base no json+python, quando eu executo os comandos abaixo:

Código: Selecionar todos
with open('data_config.json') as json_Rfile:
    data = json.load(json_Rfile)


Data então é o objeto json que está constante no arquivo, porém vejam que o objeto possui dois objetos, sendo um 'CALIB' e outro 'SETUP'.
O que eu estou procurando fazer de forma cega é utilizar o acesso aos endereços como se fosse um array multidimensional, sem conhecer os nomes, mas sim suas posições.
LikeC, data[0][0], para acessar a estrutura - 0 - CALIB, na posição - 0 - RPM.
ou então, algo para acessar data[1][2][0], para acessar a estrutura - 1 - SETUP, na posição - 2 - TSET no campo 0, de valor 1.0.

Estou estudando a alguns dias, e ainda não consegui capturar a semantica paupavel sobre como utilizar.

Alguém que ja utilizou, poderia, por favor, me ensinar como utilizar o dito cujo?
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 4981
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Re: Json+Python

Mensagempor xultz » 05 Jan 2021 16:24

É que é o seguinte, quando você abre o Jason no Python ele retorna um dicionário, e não um array. Um dicionário é uma estrutura de informações do tipo chave:valor, por exemplo:

Código: Selecionar todos
xyz = {}  # Declaro um dicionário vazio
xyz["nome"] = "Joãozinho"  # Crio uma chave no dicionário cujo nome da chave é "nome", e cujo valor é "Joãozinho"
xyz["idade"] = 47  # Crio outra chave

print(xyz)  # Vai mostar algo do tipo {'nome': 'Joãozinho', 'idade': 47}
print(xyz["nome"])
print(xyz["idade"])


No teu caso, quando você abre o Jason que você criou ali, ele vai retornar o seguinte dicionário:
Código: Selecionar todos
{'CALIB': {'RPM': 2.3, 'TMP': 60000, 'TSET': [2.5, 3.7]}, 'SETUP': {'RPM': 7500, 'TMP': 3.5, 'TSET': [1.0, 1.67]}}

Esse é um dicionário que possui dois dicionários dentro. O primeiro você acessa com data["CALIB"] e retorna
Código: Selecionar todos
{'RPM': 2.3, 'TMP': 60000, 'TSET': [2.5, 3.7]}

e o segundo você acessa com data["SETUP"] e retorna
Código: Selecionar todos
{'RPM': 7500, 'TMP': 3.5, 'TSET': [1.0, 1.67]}

Para acessar aquele parâmetro TSET do dicionário SETUP, você acessa com data["SETUP"]["TSET"], e ele retorna
Código: Selecionar todos
[1.0, 1.67]

Isso que ele retornou agora é uma lista (que é semelhante a um array, com a diferença que cada posição pode ter uma variável de qualquer tipo). Para acessar aquele valor 1.67 desta lista, você acessa com data["SETUP"]["TSET"][1], e ele vai retornar somente o float com esse valor.

Então assim, dicionário é dicionário, lista é lista. Quando você usa o json.load, ele retorna um dicionário, goste ou não. A vantagem é que se você cria um dicionário, você consegue exportar ele em json com a mesma facilidade. Porém, se você quer acessar os dados sem saber o nome dos campos, então json não é a melhor opção prá você, talvez devesse usar algum tipo de tabela e talvez exportar e importar um CSV, ou mesmo usar um arquivo de banco de dados do sqlite3.
Você pode até iterar nos valores, por exemplo usando um
Código: Selecionar todos
for campo in data:

e campo vai receber o primeiro dicionário, depois que rodar vai receber o segundo dicionário, e assim por diante, mas de novo, tá perdendo o sentido de usar um arquivo de chave:valor como é o json, e o dicionário do python.
Note que se eu mudar o arquivo json para:
Código: Selecionar todos
{
"SETUP": {
   "RPM" : 7500,
   "TMP" : 3.5,
   "TSET": [1.0, 1.67]
   },
"CALIB": {
   "RPM" : 2.3,
   "TMP" : 60000,
   "TSET": [2.5, 3.7]
   },
}

(eu inverti a ordem de CALIB e SETUP), o dicionário vai continuar igual e você continua acessando os valores de maneira igual, o que não acontece numa tabela.

É isso, espero ter ajudado um tiquinho.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 2963
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: Json+Python

Mensagempor fabim » 08 Jan 2021 13:42

É Xultz, realmente, não faz sentido o que eu queria fazer.
Hoje de manhã eu estudei mais, e entendi perfeitamente o que você quis dizer.
O proprio nome ja diz, um DICIONARIO, ou seja, entro com referência e retorno um significado....

No caso, eu ao invés de utilizar ponteiros numericos para os parametros, vou apenas utilizar o nome da chave para acessar o parametro!!!

Entendi perfeitamente!!!

Muito obrigado, e sim, json é bem mais facil e simples depois que se entende o uso destinado!!!

Sincerely;
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 4981
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Voltar para Scripts ( Python, Lua, SQL, PHP, HTML, Matlab, etc... )

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron