JSON Selection
Use JSON selectors anywhere Hen expects a response-body operand, including captures, assertions, redaction rules, and dependency reads.
Common Selectors
& body.user.id -> $USER_ID
^ & body.items[0].name == "first"
^ & body.[0].id == 123
^ & body.jobs[? recipient == $RECIPIENT && status != "failed"].status == "succeeded"
^ & json(body.result.content[0].text).items[0].id == "123"
^ &[Create Job].body.result.state == "completed"
Selector Rules
bodystarts from the current response JSON value.- Use dot access for object fields such as
body.user.id. - Use
[index]for arrays nested under an object key, such asbody.items[0].name. - Use
body.[index]when the root value is an array. - Use
[? ...]to query an array and continue from the matching element.
Filter Queries
Filter queries:
- evaluate paths relative to each array item
- support
==and!= - accept scalar literals or
$VARIABLEvalues - may combine clauses with
&& - must resolve to exactly one element
Zero or multiple matches are failures.
Decoded JSON
Use json(...) when a selected value contains stringified JSON and you want another traversal pass.
Use &[Request Name].body... when selecting from a declared dependency response instead of the
current response.
Hen intentionally stays narrower than full JSONPath or jq. There are no wildcards, slices,
projections, recursive descent, regex filters, or || selectors.