Public API for jq

Macros and Functions

jq

Invoke jq with a filter on a set of json input files.

For jq documentation, see https://stedolan.github.io/jq/.

Usage examples:

# Remove fields from package.json
jq(
    name = "no_dev_deps",
    srcs = ["package.json"],
    filter = "del(.devDependencies)",
)

# Merge bar.json on top of foo.json
jq(
    name = "merged",
    srcs = ["foo.json", "bar.json"],
    filter = ".[0] * .[1]",
    args = ["--slurp"],
    out = "foobar.json",
)

# Long filters can be split over several lines with comments
jq(
    name = "complex",
    srcs = ["a.json", "b.json"],
    filter = """
        .[0] as $a
        # Take select fields from b.json
        | (.[1] | {foo, bar, tags}) as $b
        # Merge b onto a
        | ($a * $b)
        # Combine 'tags' array from both
        | .tags = ($a.tags + $b.tags)
        # Add new field
        + {\"aspect_is_cool\": true}
    """,
    args = ["--slurp"],
)

# Load filter from a file
jq(
    name = "merged",
    srcs = ["foo.json", "bar.json"],
    filter_file = "filter.txt",
    args = ["--slurp"],
    out = "foobar.json",
)

name

Name of the rule

srcs

List of input json files

filter

Filter expression (https://stedolan.github.io/jq/manual/#Basicfilters)

filter_file

File containing filter expression (alternative to filter)

args

Additional args to pass to jq

out

Name of the output json file; defaults to the rule name plus ".json"

kwargs

Other common named parameters such as tags or visibility