Basic Operations¶
Selecting values¶
Select one property from an object.
jq¶
echo '{"name":"Alice","age":34}' |
jq -r '.name'
JFTL¶
"$.name"
Output¶
"Alice"
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
"$.name"
},
"datasets": {
"input": { "name": "Alice", "age": 34 }
}
}
Filtering lists¶
Keep only records that satisfy a condition.
jq¶
echo '[{"name":"Alice","age":34},{"name":"Noah","age":22}]' |
jq 'map(select(.age > 28))'
JFTL¶
{ "$": true, "filter": "$py=_['age'] > 28" }
Output¶
[
{ "name": "Alice", "age": 34 }
]
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
{ "$": true, "filter": "$py=_['age'] > 28" }
},
"datasets": {
"input": [
{ "name": "Alice", "age": 34 },
{ "name": "Noah", "age": 22 }
]
}
}
Mapping over lists¶
Apply a calculation to every value in an array.
jq¶
echo '[1,3,5,7]' |
jq 'map(. * 2)'
JFTL¶
{ "$": true, "map": "$py=_ * 2" }
Output¶
[ 2, 6, 10, 14 ]
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
{ "$": true, "map": "$py=_ * 2" }
},
"datasets": {
"input": [ 1, 3, 5, 7 ]
}
}
Mapping over records¶
Turn a list of records into an object whose keys and values are calculated from each record.
jq¶
echo '{"items":[{"name":"Pear","price":1.25},{"name":"Plum","price":0.8}]}' |
jq '.items | map({(.name): (.price * 2)}) | add'
JFTL¶
{
"$": true,
"data": "$.items",
"map": [ "$.name", "$py= _['price'] * 2"],
"transform": "pairs_to_object"
}
Output¶
{ "Pear": 2.5, "Plum": 1.6 }
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out": {
"$": true,
"data": "$.items",
"map": [ "$.name", "$py= _['price'] * 2"],
"transform": "pairs_to_object"
}
},
"datasets": {
"input": {
"items": [
{ "name": "Pear", "price": 1.25 },
{ "name": "Plum", "price": 0.8 }
]
}
}
}
Sorting lists¶
Sort scalar values.
jq¶
echo '[8,2,5,1,9]' |
jq 'sort'
JFTL¶
"$py=sorted(_)"
Output¶
[ 1, 2, 5, 8, 9 ]
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
"$py=sorted(_)"
},
"datasets": {
"input": [ 8, 2, 5, 1, 9 ]
}
}
Filtering distinct values in a list¶
Remove duplicate values.
jq¶
echo '[3,1,3,2,1,4]' |
jq 'unique'
JFTL¶
Leveraging Python comprehension - creating a map based on the
"$py=[_[i] for i in range(len(_)) if _[i] not in _[:i]]"
Output¶
[ 1, 2, 3, 4 ]
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
"$py=[_[i] for i in range(len(_)) if _[i] not in _[:i]]"
},
"datasets": {
"input": [3,1,3,2,1,4]
}
}
Combining filters¶
Filter records and then select one property.
jq¶
echo '[{"name":"Alice","age":34},{"name":"Noah","age":22}]' |
jq 'map(select(.age > 28) | .name)'
JFTL¶
{
"$": true,
"foreach": { "in": "$", "if": "$py=_['age'] > 28", "out": "$.name" }
}
Output¶
[ "Alice" ]
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
{
"$": true,
"foreach": { "in": "$", "if": "$py=_['age'] > 28", "out": "$.name" }
}
},
"datasets": {
"input": [
{ "name": "Alice", "age": 34 },
{ "name": "Noah", "age": 22 }
]
}
}
Splitting strings¶
Split a string and select the first word.
jq¶
echo '{"name":"Alice Smith"}' |
jq -r '.name | split(" ")[0]'
JFTL¶
"$py=_['name'].split(' ')[ 0 ]"
Output¶
"Alice"
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
"$py=_['name'].split(' ')[ 0 ]"
},
"datasets": {
"input": { "name": "Alice Smith" }
}
}
Conditional logic¶
Choose an output based on a condition.
jq¶
echo '{"name":"Noah","age":16}' |
jq -r 'if .age >= 18 then "Adult" else "Child" end'
JFTL¶
{
"$": true,
"case": [
{ "when": "$py=_['age'] >= 18", "then": "Adult" },
{ "else": "Child" }
]
}
Output¶
"Child"
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
{
"$": true,
"case": [
{ "when": "$py=_['age'] >= 18", "then": "Adult" },
{ "else": "Child" }
]
}
},
"datasets": {
"input": { "name": "Noah", "age": 16 }
}
}
Handling null values¶
Remove null values from an array.
jq¶
echo '[2,null,4,null,6]' |
jq 'map(select(. != null))'
JFTL¶
{ "$": true, "filter": "$py=_ is not None" }
Output¶
[ 2, 4, 6 ]
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
{ "$": true, "filter": "$py=_ is not None" }
},
"datasets": {
"input": [ 2, null, 4, null, 6 ]
}
}
Formatting output¶
Build a string from values in an object.
jq¶
echo '{"name":"Alice","age":34}' |
jq -r '"Name: \(.name), Age: \(.age)"'
JFTL¶
"Name: ${.name}, Age: ${.age}"
Output¶
"Name: Alice, Age: 34"
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
"Name: ${.name}, Age: ${.age}"
},
"datasets": {
"input": { "name": "Alice", "age": 34 }
}
}
Composing records¶
Create a new object from an existing object, including calculated fields.
jq¶
echo '{"name":"Alice","age":34}' |
jq '{name: .name, age: (.age + 5)}'
JFTL¶
{ "name": "$.name", "age": "$py=_['age'] + 5" }
Output¶
{ "name": "Alice", "age": 39 }
Complete JFTL example¶
{
"main": { "$": true, "data": "$_datasets.input", "out":
{ "name": "$.name", "age": "$py=_['age'] + 5" }
},
"datasets": {
"input": { "name": "Alice", "age": 34 }
}
}