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

PythonJsonNumpy

Python Problem Overview


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

Python Solutions


Solution 1 - Python

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFranco PiccoloView Question on Stackoverflow
Solution 1 - PythonvencaslacView Answer on Stackoverflow