Skip to content

JSONata Benchmarks

Branchline vs JSONata performance on a curated case matrix.

Latest release results

JSONata cross-engine results

Source data: CSV.

Scores are throughput in ops/s (higher is faster). Ratios compare Branchline throughput to the fastest JSONata engine. Rows require comparable state and no credibility flag before they count toward speedup summaries.

Dashjoin outliers are excluded from the summary and breakdown (outside 0.01x–100x Dashjoin median).

Branchline speedup summary

Counts include cases where both engines have scores, comparable state, and no credibility flag. Speedup is Branchline ops/s divided by Dashjoin ops/s.

Comparison Faster cases Total cases Avg speedup (faster cases) Max speedup
Interpreter vs Dashjoin 10 10 23.659x 223.862x
VM vs Dashjoin 9 10 12.803x 105.44x

Case breakdown

Case Branchline Interpreter (ops/s) Branchline VM (ops/s) Fastest JSONata (ops/s) Fastest JSONata engine Interpreter vs JSONata VM vs JSONata
api-envelope-shaping 31943.828 29589.864 28527.958 dashjoin 1.12x 1.037x
contract-drift-projection 32602.403 31710.865 20265.989 dashjoin 1.609x 1.565x
contract-error-branches 32846.748 32429.179 28928.344 dashjoin 1.135x 1.121x
large-filter-map-aggregate 30181.764 20117.842 20763.614 dashjoin 1.454x 0.969x
lookup-join-enrichment 30685.598 26639.593 17833.193 dashjoin 1.721x 1.494x
nested-mapping-filtering 28930.097 17467.332 13947.453 dashjoin 2.074x 1.252x
numeric-precision-invoice 32506.954 25991.691 25599.068 dashjoin 1.27x 1.015x
performance/case001 5671.711 2671.402 25.336 dashjoin 223.862x 105.44x
string-object-construction 32266.286 31841.224 26979.16 dashjoin 1.196x 1.18x
xml-ish-shape 32782.725 31839.119 28394.54 dashjoin 1.155x 1.121x

Row state

Engine Case Score (ops/s) Allocation (B/op) Validation state Comparable Credibility flag Reason
branchline-interpreter api-envelope-shaping 31943.828 2262.411 valid true ok n/a
branchline-interpreter contract-drift-projection 32602.403 1967.217 valid true ok n/a
branchline-interpreter contract-error-branches 32846.748 1153.611 valid true ok n/a
branchline-interpreter large-filter-map-aggregate 30181.764 5439.332 valid true ok n/a
branchline-interpreter lookup-join-enrichment 30685.598 2658.412 valid true ok n/a
branchline-interpreter nested-mapping-filtering 28930.097 5020.014 valid true ok n/a
branchline-interpreter numeric-precision-invoice 32506.954 2341.611 valid true ok n/a
branchline-interpreter performance/case001 5671.711 191672.874 valid true ok n/a
branchline-interpreter string-object-construction 32266.286 1664.81 valid true ok n/a
branchline-interpreter xml-ish-shape 32782.725 2089.611 valid true ok n/a
branchline-vm api-envelope-shaping 29589.864 1278.791 valid true ok n/a
branchline-vm contract-drift-projection 31710.865 2348.812 valid true ok n/a
branchline-vm contract-error-branches 32429.179 1266.071 valid true ok n/a
branchline-vm large-filter-map-aggregate 20117.842 11068.021 valid true ok n/a
branchline-vm lookup-join-enrichment 26639.593 320.051 valid true ok n/a
branchline-vm nested-mapping-filtering 17467.332 5740.024 valid true ok n/a
branchline-vm numeric-precision-invoice 25991.691 5084.816 valid true ok n/a
branchline-vm performance/case001 2671.402 294402.557 valid true ok n/a
branchline-vm string-object-construction 31841.224 1823.211 valid true ok n/a
branchline-vm xml-ish-shape 31839.119 2348.812 valid true ok n/a
dashjoin api-envelope-shaping 28527.958 8404.018 valid true ok n/a
dashjoin contract-drift-projection 20265.989 30328.021 valid true ok n/a
dashjoin contract-error-branches 28928.344 5726.383 valid true ok n/a
dashjoin large-filter-map-aggregate 20763.614 23984.821 valid true ok n/a
dashjoin lookup-join-enrichment 17833.193 43201.624 valid true ok n/a
dashjoin nested-mapping-filtering 13947.453 67782.43 valid true ok n/a
dashjoin numeric-precision-invoice 25599.068 13952.236 valid true ok n/a
dashjoin performance/case001 25.336 4.3753968708E7 valid true ok n/a
dashjoin string-object-construction 26979.16 14912.815 valid true ok n/a
dashjoin xml-ish-shape 28394.54 9851.214 valid true ok n/a
ibm api-envelope-shaping 22631.24 14220.341 valid true ok n/a
ibm contract-drift-projection 14890.234 42834.429 valid true ok n/a
ibm contract-error-branches 26520.269 8032.031 valid true ok n/a
ibm large-filter-map-aggregate 1.587020146E8 0.0 evaluation_error false implausible_high_score_near_zero_alloc java.lang.reflect.InvocationTargetException
ibm lookup-join-enrichment 2.45759183738E8 0.0 evaluation_error false implausible_high_score_near_zero_alloc java.lang.reflect.InvocationTargetException
ibm nested-mapping-filtering 6403.557 202559.333 valid true ok n/a
ibm numeric-precision-invoice 22360.675 12544.019 valid true ok n/a
ibm performance/case001 2.46022063338E8 0.0 compile_error false implausible_high_score_near_zero_alloc line 1:15 at null: token recognition error at: '#' , line 1:16 at [@4,16:17='$i',<47>,1:16]: mismatched input '$i' expecting {'.', ',', 'in', '?', '[', '{', '}', '~>', '*', '/', '+', '-', '%', '=', '!=', '<', '<=', '>', '>=', '&', '^', 'and', 'or'}
ibm string-object-construction 26921.242 9131.223 valid true ok n/a
ibm xml-ish-shape 19789.458 27059.222 valid true ok n/a

Release history

Full archive: Release benchmark history.

Scope

  • Default suite: case matrix in jsonata-benchmarks/src/jmh/resources/jsonata-case-matrix.yaml.
  • Full JSONata test-suite runs are opt-in via -PjsonataFullSuite=true or a custom -PjmhIncludes=....
  • Cross-engine rows are meaningful only when Branchline interpreter, Branchline VM, Kotlin baseline, and any configured JSONata engines perform semantically equivalent JSON transformations.

Methodology

JSONata benchmark pages cover execution throughput for JSON-like transformations. They do not include Branchline-only XML, inspect, contract, or conversion-loss measurements unless the page labels them separately.

Result type Included engines Requirement before comparison
Cross-engine JSON execution Branchline interpreter, Branchline VM, Kotlin baseline, Dashjoin JSONata, IBM JSONata. Transformation intent is equivalent and semantic validation records a pass or expected non-equivalence.
Parse or compile cost JSONata expression compilation, Branchline program compilation, or Kotlin setup measured separately. Do not combine with execution throughput.
Unavailable or expected-failure rows Missing external jars, unsupported functions, timeouts, and expected JSONata failures. Show the reason instead of treating the row as zero throughput.

Representative case categories

Category Planned case IDs Product framing
ETL and API mediation etl-order-normalization, api-envelope-shaping Common service-boundary JSON reshaping with defaults and nested output.
Nested mapping/filtering nested-mapping-filtering, large-filter-map-aggregate Repeated filtering and nested output construction over product-like arrays.
Joins/lookups lookup-join-enrichment, jsonata-migration-pack-01 Enrich records from object-key lookup tables.
String/object construction string-object-construction, jsonata-migration-pack-02, jsonata-migration-pack-04, jsonata-migration-pack-05 String cleanup, labels, slugs, CSV-like joins, and object-shaped public output.
XML-ish JSON shape xml-ish-shape Attribute/text-key JSON that mirrors XML mapping without using Branchline-only XML runtime features.
Contract/error branches contract-error-branches, contract-drift-projection Stable output under optional fields, status branches, and error payloads.
Numeric safety numeric-precision-invoice Currency totals, discounts, and large identifiers with documented numeric equivalence.
Migration examples jsonata-migration-pack-01..05 Clear JSONata expressions with Branchline analogs and Kotlin evaluators.

The matrix still includes micro and JSONata-suite shaped rows. A missing external Dashjoin or IBM jar must be reported as unavailable, expected failures must remain visible, and semantic validation must be recorded before publishing speed claims for a case.

string-concat/case000 is retained as a JSONata-suite scalar baseline and is not used for Branchline speedup claims. Use string-object-construction for the comparable object-output string construction baseline.

Run locally

DASHJOIN_REPO=path/to/dashjoin-jars \
IBM_JSONATA_REPO=path/to/ibm-jars \
./gradlew :jsonata-benchmarks:jmh

Representative long profile:

DASHJOIN_REPO=path/to/dashjoin-jars \
IBM_JSONATA_REPO=path/to/ibm-jars \
./gradlew :jsonata-benchmarks:jmh -PjmhProfile=representative-long

Override the selected cases or run length with -PjmhCaseIds=..., -PjmhWarmupIterations=..., -PjmhIterations=..., -PjmhTimeOnIteration=..., and -PjmhForks=....

Raw artifacts

Latest assets live on the latest GitHub release.

Asset names:

  • branchline-jsonata-summary-<tag>.md
  • branchline-jsonata-summary-<tag>.csv
  • branchline-jsonata-jmh-<tag>.json