Nishith Shetty
Nishith Shetty

Reputation: 56

How to JSON serialize a python built-in class (eg. int)?

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

Answers (1)

Raphael Medaer
Raphael Medaer

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

Related Questions