FlowiseAI/Flowise · error · Error
Values must be a valid JSON array of value ranges
Error message
Values must be a valid JSON array of value ranges
What it means
Thrown by BatchUpdateValuesTool._call when JSON.parse(params.values) fails. Unlike update/append, BatchUpdateValuesSchema describes values as a JSON array of value-range objects ([{"range":"Sheet1!A1:B2","values":[[...]]}]), and the parsed result is placed under body.data for the values:batchUpdate endpoint. A parse failure here usually means the agent modeled the input as a single range instead of an array of {range, values} objects.
Source
Thrown at packages/components/nodes/tools/GoogleSheets/core.ts:582
method: 'POST',
headers: {}
}
super({
...toolInput,
accessToken: args.accessToken
})
this.defaultParams = args.defaultParams || {}
}
async _call(arg: any): Promise<string> {
const params = { ...arg, ...this.defaultParams }
try {
let valueRanges
try {
valueRanges = JSON.parse(params.values)
} catch (error) {
throw new Error('Values must be a valid JSON array of value ranges')
}
const body = {
valueInputOption: params.valueInputOption || 'USER_ENTERED',
data: valueRanges,
includeValuesInResponse: params.includeValuesInResponse || false
}
const endpoint = `spreadsheets/${params.spreadsheetId}/values:batchUpdate`
return await this.makeGoogleSheetsRequest({
endpoint,
method: 'POST',
body,
params
})
} catch (error) {
return formatToolError(`Error batch updating values: ${error}`, params)View on GitHub (pinned to abe4a8601a)
Solutions
- Ensure values is JSON.stringify([{range:'Sheet1!A1:B2', values:[['x','y']]}, ...]) — an array of value-range objects.
- Differentiate the prompt/schema from update_values: emphasize 'array of {range, values} objects'.
- Validate with Array.isArray(parsed) and parsed.every(r => r.range && Array.isArray(r.values)) after parsing.
- If only one range is needed, prefer update_values over batch_update_values to avoid the structural mismatch.
Example fix
// before — flat 2D array, wrong for batch
values: JSON.stringify([['a','b']])
// after — array of value-range objects
values: JSON.stringify([{ range: 'Sheet1!A1:B1', values: [['a','b']] }]) Defensive patterns
Strategy: validation
Validate before calling
function asValueRanges(input: unknown): string {
const arr = typeof input === 'string' ? JSON.parse(input) : input
if (!Array.isArray(arr) || !arr.every(r => r && typeof r === 'object' && 'range' in r && Array.isArray((r as any).values))) {
throw new Error('batch values must be an array of { range, values[][] }')
}
return JSON.stringify(arr)
} Type guard
interface ValueRange { range: string; values: unknown[][] }
function isValueRangeArray(v: unknown): v is ValueRange[] {
return Array.isArray(v) && v.every(r => !!r && typeof r === 'object' && typeof (r as any).range === 'string' && Array.isArray((r as any).values))
} Try / catch
try {
return await batchUpdate.invoke({ ..., values: asValueRanges(input) })
} catch (e) {
if (e instanceof Error && e.message === 'Values must be a valid JSON array of value ranges') {
return wrapAsValueRanges(input) // auto-fix single range
}
throw e
} Prevention
- Reuse distinct prompts for batch vs single update to avoid shape confusion.
- Validate Array.isArray + every({range, values}) before the call.
- For a single range, prefer update_values over batch_update_values.
- Show the exact {range, values} object shape in the agent's few-shot examples.
When it happens
Trigger: params.values is a 2D array (correct for update but wrong for batch), a single {range,values} object rather than an array of them, or a malformed multi-range JSON. The body.data field then receives a non-array, but the throw happens earlier at the parse step.
Common situations: Reusing an update_values prompt template for batch_update_values; agents concatenating range objects with commas without an enclosing array; trailing commas after the last element.
Related errors
- Values must be a valid JSON array
- chatflowId must be a valid array
- Invalid JSON in executeFlowOverrideConfig: ${parseError.mess
- Invalid input array
- Invalid Flow State
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/c6c2f287ce6f18ad.
Report an issue: GitHub.