[b]"How do you properly python cast json as object? Best practices?"[/b] or [b]"What's the correct way to python c

18 Replies, 751 Views

"Struggling to python cast json as object – any tips?"

Hey folks!

So I’ve been messing around with some APIs and keep running into this issue—trying to python cast json as object in Python. I know `json.loads()` gets me a dict, but sometimes I wanna work with it like an actual object (dot notation, ya know?).

I’ve seen stuff like `namedtuple` or `SimpleNamespace`, but not sure what’s the cleanest way.

Any of you got a favorite method? Or is there a slick lib for this?

(Also, pls no "just use dicts" replies—I’m stubborn and wanna do it this way lol.)

Thanks in advance! 🚀
Hey! I feel ya—working with dicts can get messy.
For python cast json as object, I swear by `dataclasses`.
Check this out:

```python
from dataclasses import dataclass
import json

@dataclass
class MyData:
name: str
age: int

json_str = '{"name": "Alice", "age": 30}'
data = MyData(**json.loads(json_str))
```

Now you can do `data.name` like a boss.
lol i was stuck on this too!
`SimpleNamespace` from `types` is my go-to for quick stuff:

```python
from types import SimpleNamespace
data = json.loads('{"key": "value"}', object_hook=lambda d: SimpleNamespace(**d))
```

Boom, now `data.key` works. Super lightweight.
If you're into libraries, try `pydantic`.
It’s not just for validation—it’s perfect for python cast json as object with dot notation.

```python
from pydantic import BaseModel

class User(BaseModel):
id: int
name: str

user = User.parse_raw('{"id": 1, "name": "Bob"}')
print(user.name) # "Bob"
```

Plus, you get type hints. Win-win!
Honestly? Just use `attrs` instead of `dataclasses` if you want more control.
It’s like dataclasses but with extra sauce.

```python
import attr
import json

@attr.s
class Item:
id = attr.ib()
name = attr.ib()

data = Item(**json.loads('{"id": 1, "name": "thingy"}'))
```

Now `data.name` works and you get repr/eq for free.
For a no-frills solution, try `namedtuple`:

```python
from collections import namedtuple
import json

User = namedtuple('User', ['id', 'name'])
data = User(**json.loads('{"id": 1, "name": "Jane"}'))
```

It’s immutable tho, so keep that in mind.
Dude, just found this lib called `marshmallow`.
It’s a bit overkill for simple stuff, but if you’re dealing with complex json, it’s gold.

```python
from marshmallow import Schema, fields

class UserSchema(Schema):
name = fields.Str()
age = fields.Int()

data = UserSchema().load(json.loads('{"name": "Tom", "age": 25}'))
```

Now `data["name"]` works, but you can tweak it to use dots.
If you’re lazy like me, `dotmap` is a lifesaver:

```python
from dotmap import DotMap
data = DotMap(json.loads('{"key": "value"}'))
```

Now `data.key` works, and it’s super flexible. No class definitions needed!
For a funky approach, try `jsonobject`:

```python
from jsonobject import JsonObject

class Person(JsonObject):
name = StringProperty()
age = IntegerProperty()

data = Person(json.loads('{"name": "Sam", "age": 40}'))
```

It’s a bit niche but great for schema-heavy stuff.
Thanks everyone!
Tried `SimpleNamespace` and `dataclasses`—both worked like a charm.
Still gotta test `pydantic` and `dotmap`, but this thread’s a goldmine.

Also, didn’t realize there were so many ways to python cast json as object.
Y’all rock! 🎉



Users browsing this thread: 1 Guest(s)