jq es un lenguaje funcional de muy alto nivel con soporte para backtracking y gestión de flujos de datos JSON. Está relacionado con los lenguajes de programación Icon y Haskell.
Sintaxis
El lenguaje jq está basado en los conceptos de flujos, tuberías y filtros familiares a los del Shell de Unix. Los filtros se pueden construir a partir de expresiones de JSON utilizando una sintaxis similar a la de JSON y se conectan con el caràcter
"|
". El filtro identidad es ".
", y por ejemplo la expresión 1 | {"a": .}
producirá el valor de JSON : {"a": 1}
.
Este ejemplo muestra cómo definir un filtro con nombre para formatear un entero en cualquier base:
def tobase($b):
def digit: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[.:.+1];
def div: (. / $b) | floor;
def mod: . % $b;
def r: if . < $b then digit else (div | r) + (mod | digit) end;
#
select(2 <= $b and $b <= 36)
| r
;
El siguiente ejemplo presenta el uso de generadores:
def send_more_money:
def choose(m;n;used): ([range(m;n+1)] - used)[];
label $pipe
| 1 as $m
| 0 as $o
| choose(8;9;[]) as $s
| choose(2;9;[$s]) as $e
| choose(2;9;[$s,$e]) as $n
| choose(2;9;[$s,$e,$n]) as $d
| choose(2;9;[$s,$e,$n,$d]) as $r
| choose(2;9;[$s,$e,$n,$d,$r]) as $y
| select(num($s;$e;$n;$d) + num($m;$o;$r;$e) == num($m;$o;$n;$e;$y))
| [$s,$e,$n,$d,$m,$o,$r,$e,$m,$o,$n,$e,$y],
break $pipe
;
Véase también
Referencias
El manual de jq y la wiki de jq son las principales referencias de jq.
Enlaces externos