# Convert URL parameters to object

Read a query string into an object; repeated keys become arrays.

Canonical: https://1loc.dev/misc/convert-url-parameters-to-object/
Version: 1.0.0
Runtime: JavaScript · Node.js 22 / modern browsers
Verification: Local fixtures; no external services
Updated: 2026-10-28

## Implementation

```javascript
function getUrlParams(query) { return Array.from(new URLSearchParams(query)).reduce((params, [key, value]) => Object.assign(params, { [key]: Object.hasOwn(params, key) ? [].concat(params[key], value) : value }), {}); }
```

## Input

```json
"?utm_source=1loc.dev&tag=email&tag=webhooks"
```

## Expected output

```json
{
  "utm_source": "1loc.dev",
  "tag": [
    "email",
    "webhooks"
  ]
}
```

## Edge case

Input:
```json
""
```
Output:
```json
{}
```

## Limits

- Values are strings; + decodes to a space as in HTML forms.
- The original checked p[k] for truthiness, so an empty first value was overwritten; Object.hasOwn keeps it.

The lab validates types and size before calling this function. Add equivalent validation at your own trust boundary.

## Source and license

Original: https://github.com/phuocng/1loc/blob/14b481cf60dff1620ab1bb99a43b1f68068cdd9b/contents/convert-url-parameters-to-object.mdx
Author: Nguyen Huu Phuoc and original contributors
Contributors: See original repository history
Source commit: 14b481cf60dff1620ab1bb99a43b1f68068cdd9b
Copyright (c) 2020 phuoc-ng
License: MIT — https://1loc.dev/licenses/
Maintainer: Oveyon
Modifications: Uses Object.hasOwn so an empty first value is kept when a key repeats; the original tested truthiness. Original MDX retained as inert source evidence.
