记一个JSON返回数据的bug

记一个JSON返回数据的bug:'Object of type int64 is not JSON serializable'

我在打包数组进行json数据返回时,有一个参数是numpy数组里计算出来的,类型为int64,直接进行json打包会报错

提示('Object of type int64 is not JSON serializable',)

,查阅了一些资料,这是因为 JSON 标准规定只支持有限的数据类型,而 int64 不是其中之一。

然后我又搜了一下,python的数据类型,int64和int有什么区别,int64在 什么情况下会出现,得到如下答案:

在 Python 中,int 是整数的基本数据类型,而 int64 是 numpy 库中的数据类型,用于表示 64 位整数。

int 是 Python 内置的整数类型,它可以表示任意大小的整数。在大多数情况下,我们使用的整数都是 int 类型。

而 int64 是 numpy 库中的数据类型,用于处理需要精确表示 64 位整数的情况。int64 类型的整数范围更大,可以表示更大的整数值,而不会溢出。

通常情况下,我们不会直接使用 int64 类型,除非需要处理大整数或者需要与 numpy 库进行交互时。在一些科学计算和数据分析的场景中,numpy 库常常会使用 int64 类型来表示整数数据。

需要注意的是,Python 的内置整数类型 int 在大多数情况下可以满足我们的需求,而且更常见和易于使用。只有在特定的情况下,比如需要处理大整数或者与 numpy 库进行交互时,才需要使用 int64 类型。

后来我把那段代码进行格式转化,转换成float类型,才没有报这个错误了

下面附上代码片段:

python 复制代码
                    for dimension in dimension_list:
                        element_df = result.loc[result['dimension'] == dimension].reset_index(drop=True)
                        dimension_dict = {}
                        dimension_dict['dimension'] = dimension
                        dimension_dict['JS'] = element_df['js_sum'].loc[0]
                        dimension_dict['EP'] = element_df['ep_sum'].loc[0]
                        dimension_dict['element'] = element_df[['elements', 'surprise', 'EP']].reset_index(drop=True).to_dict(orient='records')
                        result_list.append(dimension_dict)
                    json_str["rcode"] = 0
                    json_str["desc"] = "定位根因success"
                    json_str["dimension"] = result_list

修改后的:

python 复制代码
                    for dimension in dimension_list:
                        element_df = result.loc[result['dimension'] == dimension].reset_index(drop=True)
                        dimension_dict = {}
                        dimension_dict['dimension'] = dimension
                        dimension_dict['JS'] = float(element_df['js_sum'].loc[0])
                        dimension_dict['EP'] = float(element_df['ep_sum'].loc[0])
                        dimension_dict['element'] = element_df[['elements', 'surprise', 'EP']].reset_index(drop=True).to_dict(orient='records')
                        result_list.append(dimension_dict)
                    json_str["rcode"] = 0
                    json_str["desc"] = "定位根因success"
                    json_str["dimension"] = result_list
相关推荐
卷无止境2 小时前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
灿飞屋3 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc3 小时前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
青少儿编程课堂5 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
灿飞屋7 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
一晌小贪欢8 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚9 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机10 小时前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_10 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰10 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain