Opened 6 years ago
Closed 6 years ago
#29963 closed New feature (wontfix)
JsonField should not allows top-level scalar values
Reported by: | Khashayar | Owned by: | nobody |
---|---|---|---|
Component: | contrib.postgres | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Hello,
There is an issue in JsonField validator.
It can validate a number instead of key/value format.
I read its source code and I understand it's for json.dumps() because it encodes python data structure to JSON format so it converts a number to string and it does not throw an exception as TypeError so JsonField validator accepts a number as a correct format and insert it in the database.
json.dumps(30)
output is : '30'
Change History (1)
comment:1 by , 6 years ago
Component: | Database layer (models, ORM) → contrib.postgres |
---|---|
Resolution: | → wontfix |
Status: | new → closed |
Summary: | JsonField validates number as a valid json format → JsonField should not allows top-level scalar values |
Type: | Bug → New feature |
Version: | 1.11 → master |
Note:
See TracTickets
for help on using tickets.
Python integers that are serialized to JSON numbers are valid JSON scalar values just like strings.
I assume you requesting that only JSON objects should be allowed to be provided for top level values for
contrib.postgres.JsonField
. If that's your request I'm afraid that it would be backward incompatible. It shouldn't be too hard to subclassJsonField
or provide a validator to prevent JSON scalar and array equivalent values from being provided.I'll close this ticket as wontfix because of the backward compatibility concerns and the small amount of code required to achieve it using standard APIs. Feel free to re-open the ticket if I misunderstood your request.