Desculpas se eu esqueci algo muito óbvio; Acabei de encontrar jq
e estou tentando usá-lo para atualizar um valor JSON sem afetar os dados circundantes.
Gostaria de canalizar um curl
resultado para jq
, atualizar um valor e canalizar o JSON atualizado para um curl -X PUT
. Algo como
curl http://example.com/shipping.json | jq '.' field: value | curl -X PUT http://example.com/shipping.json
Até agora eu o hackeado usando sed
, mas depois de olhar alguns exemplos do |=
operador em jq
tenho certeza que não preciso deles.
Aqui está um exemplo de JSON - como eu usaria jq
para definir "local": false
, preservando o resto do JSON?
{
"shipping": {
"local": true,
"us": true,
"us_rate": {
"amount": "0.00",
"currency": "USD",
"symbol": "$"
}
}
}
"
-lo, como.shipping.local = "new place"
. Portanto, todo o comando serácurl http://example.com/shipping.json | jq '.shipping.local = "new place"'
. Caso contrário, você obterá erros estranhos.false
. Os valores não precisam ser strings.false
. O que há de errado?Atualize um valor (define .foo.bar como "novo valor"):
Atualize um valor usando uma variável (define .foo.bar como "hello"):
fonte
uma função semelhante ao operador | = é map. mapa será adequado para evitar a necessidade de um filtro anterior para a matriz ...
imagine que seus dados são uma matriz (muito comum neste exemplo)
portanto, é necessário considerar a matriz no código como:
ou usar a função de mapa que é criada para funcionar em cada elemento da matriz como
Observação
Para o bem dos que estão aprendendo, você também cometeu alguns erros no uso do jq, apenas considere que ele "lê" o primeiro parâmetro como o programa, portanto, todos os comandos desejados devem ser incluídos na primeira string após chamar o programa.
fonte