Skip to content
If you find fx useful, please consider supporting me:

Sponsor
A good coffee in Zurich costs around $7 ;-)

Built-in Functions

Fx provides a set of built-in functions that can be used to process JSON data.

len(x)

Returns the length of an array, string, or object.

sh
curl https://fx.wtf/example.json | fx len

uniq(x)

Returns unique values of an array.

sh
curl https://fx.wtf/example.json | fx .tags uniq

sort(x)

Sorts an array.

sh
curl https://fx.wtf/example.json | fx .tags sort

sortBy(fn)(x)

Sorts an array by a fn function.

sh
echo '[1,2,3,4,5]' | fx 'sortBy(x => x % 2 > 0)'

The sortBy is curried, it returns a function that can called.

map(fn)(x)

Maps an array or an object with a fn function.

sh
curl https://fx.wtf/example.json | fx .issues 'map(x => x.title)'

The map is curried, it returns a function that can called.

The second argument to fn is the index, or the key of the current item.

walk(fn)(x)

Walks an array or an object with a fn function.

sh
curl https://fx.wtf/example.json | fx 'walk(x => typeof x === "string" ? x.toUpperCase() : x)'

Same as map but works recursively. The second argument to fn is the index, or the key of the current item.

filter(fn)(x)

Filters an array or an object with a fn function.

sh
curl https://fx.wtf/example.json | fx .issues 'filter(x => x.state === "open")'

groupBy(fn)(x)

Groups an array by a fn function.

sh
curl https://fx.wtf/example.json | fx .issues 'groupBy(x => x.state)'

The groupBy is curried, it returns a function that can be used to group an array.

chunk(size)(x)

Chunks an array into smaller arrays of a given size.

sh
echo '[1,2,3,4,5]' | fx 'chunk(2)'

The chunk is curred, it returns a function that can be used to chunk an array.

flatten(x)

Flattens an array.

sh
echo '[[1,2],[3,4],[5]]' | fx flatten

reverse(x)

Reverses an array.

sh
echo '[1,2,3,4,5]' | fx reverse

keys(x)

Returns an array of keys of an object.

sh
echo '{"a": 1, "b": 2}' | fx keys

values(x)

Returns an array of values of an object.

sh
echo '{"a": 1, "b": 2}' | fx values

list(x)

Prints an array as a list. This is useful for combining output with other commands.

sh
echo '[1, 2, 3]' | fx list | xargs -I{} echo "The number is {}"

save(x)

Edit-in-place the input data.

sh
fx example.json 'x.name = x.name.toUpperCase(), x' save

The edited data will be saved to the same example.json file.

toBase64(x)

Encodes a string to base64.

sh
curl https://fx.wtf/example.json | fx .text toBase64

fromBase64(x)

Decodes a base64 string.

sh
echo '"SGVsbG8sIFdvcmxkIQ=="' | fx fromBase64

YAML.stringify(x)

Converts a JSON object to YAML.

sh
curl https://fx.wtf/example.json | fx '.users[]' YAML.stringify

YAML.parse(x)

Converts a YAML string to JSON.

INFO

You can use --yaml flag to parse YAML:

sh
cat example.yaml | fx --yaml

Fx will also automatically detect YAML with the .ya?ml extension.

sh
fx example.yaml