GitHub Actions "fromJSON ... Unable to parse" in CI
fromJSON expects a strictly valid JSON string. An empty value, single quotes instead of double quotes, or a trailing comma makes it fail with a parse error during expression evaluation.
What this error means
A job fails while evaluating an expression with "Unable to parse" and a JSON snippet, commonly when a dynamic matrix is built from a step output that was empty or malformed.
Error: Unable to parse '[ {os: ubuntu-latest, } ]':
Unexpected character encountered while parsing valueCommon causes
The JSON uses single quotes or unquoted keys
JSON requires double-quoted keys and string values; {os: x} or '[...]' is not valid JSON.
The source output was empty
A step that should emit JSON produced nothing, so fromJSON receives an empty string it cannot parse.
How to fix it
Emit strict JSON from the producing step
- Generate the value with a tool that writes valid JSON (e.g.
jq -c). - Write it to
$GITHUB_OUTPUTas a single line. - Reference it with
fromJSON(steps.x.outputs.y).
matrix=$(jq -cn '{os:["ubuntu-latest","windows-latest"]}')
echo "matrix=$matrix" >> "$GITHUB_OUTPUT"Guard against an empty output
Default to a valid empty JSON value so fromJSON never sees an empty string.
echo "matrix=${matrix:-[]}" >> "$GITHUB_OUTPUT"How to prevent it
- Produce JSON with
jq -c, not by string concatenation. - Default to
[]or{}when the source can be empty. - Echo the output and validate it before using fromJSON.