我有一个从熊猫生成的以下形式的字典列表。我想将其转换为 json 格式。
list_val = [{1.0: 685}, {2.0: 8}]
output = json.dumps(list_val)
然而,json.dumps 抛出错误:TypeError: 685 is not JSON serializable
我猜这是从 numpy 到 python(?) 的类型转换问题。
但是,当我使用 np.int32(v) 转换数组中每个字典的值 v 时,它仍然会抛出错误。
编辑:这是完整的代码
new = df[df[label] == label_new]
ks_dict = json.loads(content)
ks_list = ks_dict['variables']
freq_counts = []
for ks_var in ks_list:
freq_var = dict()
freq_var["name"] = ks_var["name"]
ks_series = new[ks_var["name"]]
temp_df = ks_series.value_counts().to_dict()
freq_var["new"] = [{u: np.int32(v)} for (u, v) in temp_df.iteritems()]
freq_counts.append(freq_var)
out = json.dumps(freq_counts)
原文由 ubh 发布,翻译遵循 CC BY-SA 4.0 许可协议
看起来你是对的:
不幸的是,numpy 数字的
__repr__
没有给你任何关于它们是什么 类型 的提示。他们伪装成int
跑来跑去,其实他们不是(倒吸 _一口气_)。最终,它看起来像json
告诉你int
不可序列化,但实际上,它告诉你这个特定的 np.int32 (或你实际拥有的任何类型)是’可序列化。 (这并不奇怪——没有 np.int32 是可 序列化的)。这也是为什么你在将它传递给json.dumps
之前 不可避免地打印出来的字典看起来也只有整数。这里最简单的解决方法可能是 编写您自己的序列化 程序1 :
你像这样使用它:
等等
1或者您可以只编写默认函数并将其作为
defaut
关键字参数传递给json.dumps
。在这种情况下,您会将最后一行替换为raise TypeError
,但是……嗯。该类更具可扩展性:-)