[b]"Best way to JSON Python get all values for key? Need help!"[/b] or [b]"How to JSON Python get all values for k

18 Replies, 1023 Views

"Struggling to json python get all values for key – any tips?"

Hey everyone,

I’ve been working with some nested JSON data in Python and hitting a wall.

Need to json python get all values for a specific key, but some are buried deep. Tried looping and recursive approaches, but it feels clunky.

Is there a cleaner or built-in way to do this? Maybe a one-liner or a library I’m missing?

Example:
```python
data = {"a": 1, "b": {"a": 2}, "c": [{"a": 3}]}
# Need all values for key "a" → [1, 2, 3]
```

Any help or shortcuts would be awesome! Thanks in advance.

(Also, if you’ve got a fav tool for this, lmk!)
Hey! For json python get all values for key, I'd recommend using `jsonpath-ng`. It's a lifesaver for nested JSON.

Example:
```python
from jsonpath_ng import parse
expr = parse('$..a')
matches = [match.value for match in expr.find(data)]
```
Super clean and handles deep nesting. Check out the docs [here](https://github.com/h2non/jsonpath-ng).
Ugh, nested JSON is the worst. I feel your pain!

For a quick fix, try this recursive function:
```python
def get_values(obj, key):
if isinstance(obj, dict):
for k, v in obj.items():
if k == key:
yield v
yield from get_values(v, key)
elif isinstance(obj, list):
for item in obj:
yield from get_values(item, key)
```
Call it with `list(get_values(data, 'a'))`. Works like a charm!
If you're lazy like me, just use `jq` from the command line:
```bash
echo 'your_json' | jq '.. | .a? // empty'
```
Not pure Python, but saves time. For Python, `jsonpath-ng` is solid too.
Why not use a simple list comprehension with recursion?

```python
def find_keys(d, target):
if isinstance(d, dict):
return [d[target]] + [v for k, v in d.items() if isinstance(v, (dict, list)) for v in find_keys(v, target)]
elif isinstance(d, list):
return [v for item in d for v in find_keys(item, target)]
return []
```
Not a one-liner, but gets the job done for json python get all values for key.
Honestly, I just use `pandas` for this.

```python
import pandas as pd
df = pd.json_normalize(data, sep='_')
print(df.filter(like='a').values.flatten())
```
Might be overkill, but it's handy if you're already using pandas.
Check out `glom`! It's a bit quirky but powerful for nested data.

```python
from glom import glom
result = glom(data, ('a',)) # but you'll need to tweak for deep nesting
```
Docs: [glom](https://glom.readthedocs.io/). Not perfect, but worth a look.
Wow, thanks for all the suggestions! Didn’t realize there were so many ways to json python get all values for key.

Tried the recursive function and it worked perfectly. Also gave `jsonpath-ng` a shot—super clean!

Still struggling with super messy data though. Anyone got tips for handling inconsistent key names? Like sometimes it’s `'a'` and other times `'A'`?

Appreciate the help!
For a no-library solution, this works:

```python
def extract_values(obj, key):
arr = []
if isinstance(obj, dict):
for k, v in obj.items():
if k == key:
arr.append(v)
arr.extend(extract_values(v, key))
elif isinstance(obj, list):
for item in obj:
arr.extend(extract_values(item, key))
return arr
```
Call it with `extract_values(data, 'a')`. Simple and effective.
If you're into one-liners (kinda), try this:

```python
values = [y for x in __import__('json').loads(__import__('json').dumps(data)) for y in ([x['a']] if 'a' in x else [])]
```
But... maybe don't. It's ugly. Stick with recursion or a lib.



Users browsing this thread: 1 Guest(s)