TypeError: Object of type 'float32' is not JSON serializable

Question:

I’m working with numpy.float32 numbers and they don’t go into JSON. What’s the right approach to overcome this issue?

import numpy as np
import json

a = np.float32(1)
json.dumps(a)

TypeError: Object of type 'float32' is not JSON serializable
Asked By: Franco Piccolo

||

Answers:

It has to be a string, so you can have:

json.dumps(str(a))

EDIT:

JSON is a format for serialising object data. It doesn’t really care or know about Python types, the json package tries to translate whatever object you pass json.dumps() into a string form via a conversion table that only supports some types (see doc below).

This is the reason why I think it’s a good idea to just pass a string to avoid this issue: numpy.float32 just isn’t in the table.

Because some have commented that explicitly passing a string to dumps “sounds wrong” I’ll just add the doc here

json.dumps(obj, *, skipkeys=False, ensure_ascii=True,
check_circular=True, allow_nan=True, cls=None, indent=None,
separators=None, default=None, sort_keys=False, **kw) Serialize obj to
a JSON formatted str using this conversion table. The arguments have
the same meaning as in dump().

Note Keys in key/value pairs of JSON are always of the type str. When
a dictionary is converted into JSON, all the keys of the dictionary
are coerced to strings. As a result of this, if a dictionary is
converted into JSON and then back into a dictionary, the dictionary
may not equal the original one. That is, loads(dumps(x)) != x if x has
non-string keys.

taken from the official docs here: https://docs.python.org/3/library/json.html

Answered By: vencaslac
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.