1

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)
6
  • Does this answer your question? How to make a class JSON serializable Commented Apr 10, 2020 at 20:07
  • 1
    I don't agree with the "question already has answer". If the user try to use type as JSON value then it's a new question. Btw this is not possible according to [the section 3 of RFC7159 ](tools.ietf.org/html/rfc7159#section-3). However if the user want to automatically convert the type in string. It might ask a new answer since it's not like serializing a Python object to JSON. Introspection is needed here. Commented Apr 10, 2020 at 20:14
  • @RaphaelMedaer that's probably answers my question - but is there any workaround to serialize native python data classes of meta class type eg- int, str Commented Apr 10, 2020 at 21:05
  • @martineau fyi, i don't think that question answers mine - this question is about serializing a python built in class - can you re-open my question so that people are able post possible answers? Commented Apr 10, 2020 at 21:06
  • 1
    As soon the question is open again, I answer your question with pleasure. You could also precise a little bit your question with your "real" needs. I have to admit that it was not really clear. ;-) Commented Apr 10, 2020 at 21:12

1 Answer 1

3

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.

Sign up to request clarification or add additional context in comments.

3 Comments

yeah I ended up doing the int.__name__ thing too and then use eval() to deserialize - wished json library was able to handle that itself Thank you for your repsonse, Raphael!
You're welcome. Don't forget to accept/vote the answer to close the question.
@NishithShetty I read (again) your previous comment. Pay attention when you use eval(). It sounds dangerous to me! Btw, I would appreciate that you edit a bit your question for something more clear. And if answer is OK for you, please accept it! ;-)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.