Comments (2)
Hi @nightan42643,
The reason for .json
to return an object and not a dict is a bit theoretical. One could be writing a class that is not to be represented as a dict when turned into json, for example a custom collection class:
class MyCollection(list, JsonSerializable):
...
c = MyCollection((1, 2, 3))
c.json # <-- this results in a list, not a dict.
MyCollection
could not override .json
to hint the right type (list
instead of dict
) as that would be a violation of the Liskov Substitution Principle. But since JsonSerializable
hints .json
as returning an object
, it is possible to override and hint list
(or dict
in your case) since that is a subtype of object
. Liskov can rest assured.
In your case, you could override as follows:
@dataclass
class Person(JsonSerializable
.with_dump(key_transformer=KEY_TRANSFORMER_CAMELCASE)
.with_load(key_transformer=KEY_TRANSFORMER_SNAKECASE)):
first_name: str
last_name: str
@property
def json(self) -> dict[str, str]:
return JsonSerializable.json.fget(self)
Or maybe even like this:
@dataclass
class Person(JsonSerializable
.with_dump(key_transformer=KEY_TRANSFORMER_CAMELCASE)
.with_load(key_transformer=KEY_TRANSFORMER_SNAKECASE)):
first_name: str
last_name: str
json: dict[str, str] = field(init=False, repr=False, compare=False)
Alternatively, you could use typing.cast
:
arno_json = typing.cast(dict[str, str], arno.json)
I hope this helps.
from jsons.
@ramonhagenaars Very clear, thanks!
from jsons.
Related Issues (20)
- Literal (and Union[Literal]) support HOT 1
- TypeError: Item in jsons.__all__ must be str, not function HOT 1
- Document issue: `dumps` should return a string? HOT 1
- Bug `with_dump` only support `json`, not support `dumps` HOT 2
- DeserializationError when loading into a class with an Optional bson.ObjectID HOT 2
- Optional and Union fields are not handled correctly HOT 2
- UserWarning: Failed to dump attribute after updating python to 3.10 HOT 2
- In nested objects, `load` is only called for the root object instead of being called for each one HOT 1
- How to make `jsons.dump()` treat `bytes` the same as Python3 `str`? HOT 2
- Deserialize JSON into Class - Ignore attributes HOT 3
- SerializationError: object of type 'abc' has no len() HOT 3
- What's the key difference between `jsons` and `pydantic`? HOT 1
- DeserializationError: Invalid type: "decimal.Decimal"
- jsons dumps fields sorted
- Test failure with Python 3.11 HOT 1
- deserialization with jsons to nested classes HOT 1
- Error: got an unexpected keyword argument 'origin'
- dicts are serialized wrongly when assigned to an attribute with an 'Any' type
- Is this project still alive ?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jsons.