jq
jq | ||
---|---|---|
Desarrollador(es) | ||
Stephen Dolan y Nico Williams https://stedolan.github.io/jq/, http://stedolan.github.io/jq/ y https://stedolan.github.io/jq | ||
Información general | ||
Paradigma | Programación_funcional, orientado al procesamiento de JSON | |
Apareció en | 22 de octubre de 2012 (12 años y 16 días) | |
Diseñado por | Stephen Dolan | |
Sistema de tipos | dinámico | |
Implementaciones | jq | |
Influido por | Icon, Haskell | |
Licencia | Licencia MIT | |
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
[editar]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
[editar]Referencias
[editar]El manual de jq y la wiki de jq son las principales referencias de jq.
Enlaces externos
[editar]- Página principal de jq
- wiki de jq
- Código fuente de jq
- Página del Lenguaje de Programación jq en la web Rosetta Code de tareas de programación comparadas