Skip to content

fix(formDataToJSON): prevent nested arrays for duplicate FormData keys#7536

Closed
Mridul012 wants to merge 1 commit intoaxios:v1.xfrom
Mridul012:fix-formdata-array
Closed

fix(formDataToJSON): prevent nested arrays for duplicate FormData keys#7536
Mridul012 wants to merge 1 commit intoaxios:v1.xfrom
Mridul012:fix-formdata-array

Conversation

@Mridul012
Copy link
Copy Markdown

@Mridul012 Mridul012 commented Mar 20, 2026

Summary

Fixes an issue in formDataToJSON where multiple entries with the same key result in nested arrays instead of a flat array.

Problem

When a FormData object contains more than two entries with the same key:

formData.append('file', 'A');
formData.append('file', 'B');
formData.append('file', 'C');

The current implementation produces:
[[A, B], C]

Instead of the expected:
[A, B, C]

Fix

Ensure that values are appended to an existing array instead of wrapping repeatedly:

if (utils.hasOwnProp(target, name)) {
if (utils.isArray(target[name])) {
target[name].push(value);
} else {
target[name] = [target[name], value];
}
}

Impact

  • Produces consistent flat arrays
  • Prevents unexpected nested structures
  • Improves handling of repeated FormData keys

Verification

Tested locally by appending multiple values with the same key and confirming output is a flat array.


Summary by cubic

Fixes formDataToJSON so repeated FormData keys produce a flat array (e.g., [A, B, C]) instead of nested arrays. Improves consistency with common FormData semantics.

Description

Ensures duplicate keys append to an existing array, rather than wrapping multiple times.

  • Summary of changes
    • In lib/helpers/formDataToJSON.js, push to target[name] if it’s already an array; otherwise wrap once as [existing, value].
  • Reasoning
    • Previous logic nested arrays after the second duplicate (e.g., [[A, B], C]). The new logic returns a flat array for all duplicates.
  • Additional context
    • package-lock.json updated (peer flags and minor cleanup). No runtime impact.

Docs

  • Update formDataToJSON docs to clarify: repeated keys return a flat array in insertion order.
  • Add a brief note for users migrating from earlier v1.x that nested arrays are no longer produced.

Testing

  • No tests added in this PR.
  • Tests recommended:
    • 3+ duplicates: A, B, C → [A, B, C]
    • 2 duplicates: A, B → [A, B]
    • Single value remains scalar (A) and becomes array only on second insert
    • Mixed value types (e.g., File, Blob, string) with duplicates remain flat and ordered.

Written for commit 1c33ad5. Summary will update on new commits.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 2 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Since this is your first cubic review, here's how it works:

  • cubic automatically reviews your code and comments on bugs and improvements
  • Teach cubic by replying to its comments. cubic learns from your replies and gets better over time
  • Add one-off context when rerunning by tagging @cubic-dev-ai with guidance or docs links (including llms.txt)
  • Ask questions if you need clarification on any suggestion

@Mridul012
Copy link
Copy Markdown
Author

Hi Just following up on this PR.

Please let me know if any changes or additional tests are needed. Happy to update accordingly.

Thanks!

@jasonsaayman
Copy link
Copy Markdown
Member

Thanks for the contribution im going to close in favour of a combined fix in #10676

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants