No BASH, posso armazenar JSON em uma variável de ambiente via jq:
export FOO=$(curl ... | jq -Rs)
Agora, se eu carregar isso em python:
bar=os.environ["FOO"]
bar
terá algo como: {\\"this\\":\\"that\\"}
, o que é um problema ao carregar com json
:
json.loads(bar) # error
Eu tentei algumas coisas repr
, incluindo rf'{os.environ["FOO"]}'
e assim por diante, mas não parece haver uma maneira gerenciada internamente de eliminar as barras extras.
Como faço para eliminar as barras extras por meio de funções de string? Prefiro não substituí-los simplesmente por uma única barra, pois talvez seja necessário alterar esse código novamente em algum momento no futuro.
Adicione o
-r
sinalizador à saída como texto bruto do arquivojq
. Aqui está um exemplo usando echo que fornece os resultados de escape:Mas a adição
-r
fornece um resultado que ainda está no formato JSON, sem todas as aspas de escape:O que pode ser analisado pelo Python.
Tentei reconstruir isso:
Isto é o que é armazenado a partir da aparência no bash:
Então, no shell python:
Então, basicamente, json.loads() não oferece nenhuma garantia em relação ao tipo de objeto Python que você obtém, mas tenta desserializar tudo o que você alimenta e, portanto, uma desserialização aninhada faz o trabalho. Mas é claro que é melhor se você puder ter certeza de que o ambiente contém os dados no formato correto, como sugere a outra resposta.