Как я могу сериализовать json в Python? - PullRequest
3 голосов
/ 25 марта 2020

Вот код и следует ошибка:

import numpy as np
import json
X=np.arange(20)
t=dict(x=list(X))
print(json.dumps(t))

Ошибка:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\json\__init__.py", line 230, in dumps
    return _default_encoder.encode(obj)
  File "C:\Python35\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Python35\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Python35\lib\json\encoder.py", line 180, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: 0 is not JSON serializable

Пожалуйста, дайте мне знать, что я могу сделать, чтобы избавиться от этого. Я пытаюсь передать это значение на график windows, и возникает та же ошибка.

Ответы [ 4 ]

6 голосов
/ 25 марта 2020

Другой способ - использовать метод tolist. Это вернет копию данных массива в виде (вложенного) списка Python. Для одномерного массива a.tolist() почти совпадает с list(a). Однако для двумерного массива tolist применяется рекурсивно:

>>> import numpy as np
>>> import json

>>> X = np.arange(20)
>>> t = dict(x=X.tolist())
>>> print(json.dumps(t))
{"x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]}
2 голосов
/ 25 марта 2020

Я думаю, это потому, что json не распознает тип данных numpy.

Я попробовал этот код, и он заработал.

import json
t= {'x': [i for i in range(20)]}
print(json.dumps(t))
2 голосов
/ 25 марта 2020

Ваши json значения не правильно набраны, я думаю. попытался найти что-то, связанное с вашим запросом: Ошибка типа: объект типа 'int64' не JSON сериализуемый

Вам просто нужно набрать приведение:

>>> t = dict(x=list(float(j) for j in X))
>>> json.dumps(t)
'{"x": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0]}'

Я думаю, это сработает.

2 голосов
/ 25 марта 2020

Отображение одного подхода int в массиве

Пример:

import numpy as np
import json
X=np.arange(20)
t=dict(x=list(map(int, X)))
print(json.dumps(t))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...