Disculpas si he pasado por alto algo muy obvio; Acabo de encontrarlo jq
y estoy tratando de usarlo para actualizar un valor JSON sin afectar los datos circundantes.
Me gustaría canalizar un curl
resultado jq
, actualizar un valor y canalizar el JSON actualizado a un curl -X PUT
. Algo como
curl http://example.com/shipping.json | jq '.' field: value | curl -X PUT http://example.com/shipping.json
Hasta ahora, lo he pirateado usando sed
, pero después de ver algunos ejemplos del |=
operador en jq
, estoy seguro de que no los necesito.
Aquí hay una muestra de JSON: ¿cómo usaría jq
para configurar "local": false
, mientras conservo el resto del JSON?
{
"shipping": {
"local": true,
"us": true,
"us_rate": {
"amount": "0.00",
"currency": "USD",
"symbol": "$"
}
}
}
"
, como.shipping.local = "new place"
. Entonces todo el comando serácurl http://example.com/shipping.json | jq '.shipping.local = "new place"'
. De lo contrario, obtendrá errores extraños.false
. Los valores no tienen por qué ser cadenas.false
. ¿Qué pasa?Actualizar un valor (establece .foo.bar en "nuevo valor"):
Actualice un valor usando una variable (establece .foo.bar en "hola"):
fuente
una función similar al operador | = es mapa. map será adecuado para evitar el requisito de un filtro previo para la matriz ...
imagina que tus datos son una matriz (muy común en este ejemplo)
por lo tanto, es necesario considerar la matriz en el código como:
o utilizar la función de mapa que está diseñada para funcionar en cada elemento de la matriz como
Observación
Por el bien de aquellos que están aprendiendo, también cometió algunos errores en el uso de jq, solo considere que "lee" el primer parámetro como el programa, por lo tanto, todos los comandos deseados se incluirán en la primera cadena después de llamar al programa.
fuente