mikefarah/yq · error

expected to find 1 number, got %v instead

Error message

expected to find 1 number, got %v instead

What it means

getSliceNumber evaluates one of the index sub-expressions of the slice operator ([start:end]) and requires it to yield exactly one node, because a slice edge must be a single integer. The expression returned %v nodes — either it emitted multiple results (e.g. .[] or a multi-match select) or none at all.

Source

Thrown at pkg/yqlib/operator_slice.go:14

package yqlib

import (
	"container/list"
	"fmt"
)

func getSliceNumber(d *dataTreeNavigator, context Context, node *CandidateNode, expressionNode *ExpressionNode) (int, error) {
	result, err := d.GetMatchingNodes(context.SingleChildContext(node), expressionNode)
	if err != nil {
		return 0, err
	}
	if result.MatchingNodes.Len() != 1 {
		return 0, fmt.Errorf("expected to find 1 number, got %v instead", result.MatchingNodes.Len())
	}
	return parseInt(result.MatchingNodes.Front().Value.(*CandidateNode).Value)
}

// clampSliceIndex resolves a possibly-negative slice index against
// length and clamps the result to [0, length].
func clampSliceIndex(index, length int) int {
	if index < 0 {
		index += length
	}
	if index < 0 {
		return 0
	}
	if index > length {
		return length
	}
	return index
}

View on GitHub (pinned to 8b5af0694b)

Solutions

  1. Use a single integer literal or expression for each slice bound: .[1:3]
  2. Replace multi-match expressions with one that yields one number (e.g. (.n // 0))
  3. Check for null matches: use defaults so the bound always resolves
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pkg/yqlib/operator_slice.go:14 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of mikefarah/yq@8b5af0694b (2026-09-05). Data as JSON: /api/errors/65eff6d6abf418cb. Report an issue: GitHub.