Reputation: 56
I need to serialize a tuple that contains a raw python datatype or in other words a built in class eg. int/str. But the json library throws an error like TypeError: Object of type type is not JSON serializable
Full traceback:
Traceback (most recent call last):
File "C:\Users\ns877v\git\analytics-kronos-worker\useful_snippets\2.py", line 2, in <module>
json.dumps(int)
File "C:\Users\ns877v\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "C:\Users\ns877v\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\ns877v\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\ns877v\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type type is not JSON serializable
[Finished in 0.4s]
Run this to replicate:
import json
json.dumps(int)
Upvotes: 1
Views: 926
Reputation: 2538
There is no way to serialize a JSON or Python type
as JSON value. As described in RFC7159 Section 3 the only available values are:
false / null / true / object / array / number / string
However you could serialize a Python type
as a JSON string. For instance, a Python int
would become JSON string value "int"
.
Since Python keyword int
is object of type type
. You can use __name__
to get its string name. For instance: print(int.__name__)
.
To automatically encode it, I let you check this answer which use a custom JSONEncoder
.
Upvotes: 3