我有一个从熊猫身上产生的口述清单,格式如下。我想把它转换成json格式。
list_val = [{1.0: 685}, {2.0: 8}]
output = json.dumps(list_val)
但是,json.dumps抛出一个错误:TypeError:685不是json可序列化的
我猜这是一个从numpy到python(?)的类型转换问题。
但是,当我使用np.int32(v)转换数组中每个dict的值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)
看起来你是对的:
不幸的是,numpy数字
__repr__
并没有给你任何关于它们是什么类型的提示。他们假装成int
的样子到处乱跑,而实际上他们不是(喘息)。最后,看起来json
告诉您int
不是可序列化的,但实际上,它告诉您,这个特定的np.int32(或您实际拥有的任何类型)不是可序列化的。(这并不奇怪——没有np.int32是可序列化的)。这也是为什么在将dict传递给json.dumps
之前不可避免地打印出的dict看起来也只有整数。这里最简单的解决方法可能是write your own serializer1:
你这样使用它:
等等
1或者您可以编写默认函数并将其作为
defaut
关键字参数传递给json.dumps
。在这种情况下,您可以用raise TypeError
替换最后一行,但是。。。无聊的。类的可扩展性更强:—)您可以使用我们的ujson叉来处理NumPy int64。caiyunapp/ultrajson: Ultra fast JSON decoder and encoder written in C with Python bindings and NumPy bindings
那么
还可以将数组转换为python列表(使用
tolist
方法),然后将列表转换为json。相关问题 更多 >
编程相关推荐