When pulling out one field is what you need
- Two hundred orders came back and you only want to know whether the ids repeat.
- You need every email or phone number from one response pasted into a spreadsheet.
- You want one nested sub-field from each element flattened into a plain array to use as fixture data.
- You need to find out which records are missing a field entirely.
- You do not have jq to hand, or simply do not want to open a terminal to read one field.
What this tool does
Paste a JSON array on the left, enter a field path, and get back a flat array of just the values at that path. The classic case: paste [{"name": "John", "age": 14}, {"name": "Mary", "age": 20}], enter name, and the result is ["John", "Mary"]. Everything recomputes as you type — there is no button to press.
Path syntax reference
| Syntax | Meaning | Example |
|---|---|---|
name / .name | A plain object property. | address.city |
[0] | An array index. | tags[0] |
['key'] / ["key"] | A property whose name has a space, a dash or a dot in it. | meta['created-at'] |
[*] | Every item in an array, flattened into the output. | roles[*].name |
These pieces combine. A path is read left to right, one step at a time, starting from each element of the pasted array.
Three examples, from simple to complex
A flat field
Input [{"name": "John", "age": 14}, {"name": "Mary", "age": 20}] with path name gives ["John", "Mary"].
A nested field
Input [{"name": "John", "address": {"city": "Taipei"}}] with path address.city gives ["Taipei"]. Each dot walks one level deeper into the object.
A wildcard fan-out
Input [{"roles": [{"name": "admin"}, {"name": "editor"}]}, {"name": "Alan"}] with path roles[*].name gives ["admin", "editor"]. The first element contributes two values, the second has no roles at all and contributes none — the output can end up shorter or longer than the input array.
What happens when a field is missing
Missing values are skipped, not replaced with null. If an element does not have the field, or a step in the path hits the wrong type, that element simply contributes nothing to the output. The stats line above the result — "Extracted N values — skipped M of K elements" — makes this visible instead of leaving you to guess why the output array is a different length than the input.
Why the pasted JSON must be an array
The root of what you paste has to be a JSON array, because the whole point of this tool is to run the same path against every element and collect the results. If you only have a single object, wrap it in square brackets — {"name": "John"} becomes [{"name": "John"}] — and the path still works the same way.
Does anything you type leave the browser
No. Parsing and extraction both run in your browser, and nothing you paste is uploaded anywhere. That is true of every tool on this site — see the privacy policy for the details.
Frequently asked questions
- Can I extract more than one field at a time?
- Not in a single run. Change the path and re-run for a second field — the whole computation is instant, so switching back and forth is cheap.
- Does this support full JSONPath?
- No. It is a small, purpose-built subset: dot notation, bracket indices, quoted keys, and a single wildcard. There is no filtering, no recursive descent, and no expressions.
- What if elements in my array have different shapes?
- Each element is evaluated on its own. One missing a field just gets skipped — it does not affect the others or stop the extraction.
- Can I export the result as CSV?
- Not from this tool — it only extracts a single field, and a flat list of values is already valid JSON, so a JSON array is what you get.
- Is there a size limit on the pasted JSON?
- Only what your browser tab's memory allows. Very large pastes will make typing feel sluggish since everything reparses live.