Eu tenho uma matriz JSON assim:
{
"SITE_DATA": {
"URL": "example.com",
"AUTHOR": "John Doe",
"CREATED": "10/22/2017"
}
}
Eu estou olhando para iterar essa matriz usando jq para que eu possa definir a chave de cada item como o nome da variável e o valor como ele é.
Exemplo:
- URL = "example.com"
- AUTOR = "John Doe"
- CREATED = "22/10/2017"
O que eu tenho até agora itera sobre a matriz, mas cria uma string:
constants=$(cat ${1} | jq '.SITE_DATA' | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]")
Quais saídas:
URL=example.com
AUTHOR=John Doe
CREATED=10/22/2017
Eu estou olhando para usar essas variáveis mais abaixo no script:
echo ${URL}
Mas isso ecoa uma saída vazia no momento. Estou supondo que preciso de eval
algo ou algo lá, mas não consigo apontar o dedo.
declare -- “$key=$value”
atribuir a tarefa com, e$AUTHOR
etc, trabalhar como no original, sem uma matriz. Ainda é mais seguro do que avaliar, embora a alteraçãoPATH
ou algo ainda seja possível, menos ainda do que esta versão.declare --
versão segura comparando $ key com uma lista de nomes de variáveis permitidos.Acabei de perceber que posso percorrer os resultados e avaliar cada iteração:
Permite que eu faça:
fonte
Eu realmente gosto da sugestão @Michel. Às vezes, você pode realmente apenas extrair o valor de algumas variáveis para executar uma tarefa nesse servidor específico usando o BASH. Portanto, as variáveis desejadas são conhecidas. O uso dessa abordagem é a maneira de evitar ou várias chamadas para jq para definir um valor por variável ou até mesmo usar a instrução read com várias variáveis nas quais algumas podem ser válidas e vazias, levando a uma mudança de valor (esse era o meu problema).
minha abordagem anterior de que o lead levará a um erro de mudança de valor se .svID [] .ID = "" ( sv obterá o valor do slotID
Se você baixou o objeto usando curl, aqui está minha abordagem para renomear algumas variáveis para um nome amigável, como extrair dados de matrizes de dados
usar eval e filtros resolverá o problema com uma linha e produzirá variáveis com o nome desejado
A vantagem, neste caso, é o fato de filtrar, renomear e formatar todas as variáveis desejadas na primeira etapa. Observe que existe. [0] | é muito comum ter, se a origem for de um servidor RESTFULL API usando GET, dados de resposta como:
Se seus dados não são de uma matriz, ou seja. é um objeto como:
basta remover o índice inicial:
Esta é uma pergunta antiga, mas senti compartilhar, pois era difícil encontrar
fonte