ljharb/qs

Parse results in multiple objects with the same key instead of one.

Open

#241 opened on Dec 20, 2017

View on GitHub
 (0 comments) (3 reactions) (0 assignees)JavaScript (744 forks)batch import
bughelp wanted

Repository metrics

Stars
 (8,015 stars)
PR merge metrics
 (Avg merge 6d 22h) (2 merged PRs in 30d)

Description

The following stringify/parse sequence works as expected:

dataB = {
  "incidents": [
    {
      "open": [
        "damaged",
        {
          "lost": [
            "red",
            "green"
          ]
        }
      ]
    }
  ]
};

queryStringB = QS.stringify(dataB, { arrayFormat: 'brackets' });
parsedB = QS.parse(queryStringB)

The result is {"incidents":[{"open":["damaged",{"lost":["red","green"]}]}]}, which matches dataB.

However, the following sequence does not result how I expect it to:

dataA = {
  "incidents": [
    "cold",
    {
      "open": [
        "damaged",
        {
          "lost": [
            "red",
            "green"
          ]
        }
      ]
    }
  ]
};

queryStringA = QS.stringify(dataA, { arrayFormat: 'brackets' });
parsedA = QS.parse(queryStringA)

This results in {"incidents":["cold",{"open":["damaged"]},{"open":[{"lost":["red","green"]}]}]}, which does not match dataA. Note that the only difference between dataA and dataB is that dataA has an extra element in the incidents array.

I saw some other parsing issues in the issue listing but none of them look quite like this.

Contributor guide