You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Neo4j Python驱动查询结果转换为JSON格式

解决Neo4j Python驱动查询结果转JSON的序列化问题

问题原因

直接使用json.dumps(info, default=str)失败,是因为Neo4j返回的Record、Node对象,以及属性中的frozenset、neo4j.time.Date等类型都是JSON无法直接序列化的,仅用str()转换会得到非结构化的字符串,无法生成合法JSON。

解决方案:自定义序列化函数

针对Neo4j返回的特殊类型,编写递归处理的序列化函数,把每个不可序列化的类型转成JSON支持的格式:

import json
import neo4j

def serialize_neo4j(obj):
    # 处理Neo4j Node对象,转成包含id、标签、属性的字典
    if isinstance(obj, neo4j.Node):
        return {
            "id": obj.id,
            "labels": list(obj.labels),  # 将frozenset转为列表
            "properties": serialize_neo4j(obj.properties)
        }
    # 处理Neo4j日期类型,转为ISO格式字符串
    elif isinstance(obj, neo4j.time.Date):
        return obj.isoformat()
    # 处理frozenset,转为列表
    elif isinstance(obj, frozenset):
        return list(obj)
    # 处理Neo4j Record对象,遍历键值对递归序列化
    elif isinstance(obj, neo4j.Record):
        return {key: serialize_neo4j(value) for key, value in obj.items()}
    # 其他类型尝试默认序列化,失败则转为字符串
    try:
        return json.JSONEncoder().default(obj)
    except TypeError:
        return str(obj)

# 使用示例:假设result是Neo4j查询返回的Result对象
records = list(result)  # 将结果流转为列表
json_data = json.dumps(records, default=serialize_neo4j, indent=2)

说明

  • 对Node对象:提取id、转为列表的labels、递归处理后的properties,保证结构清晰
  • 对neo4j.time.Date:用isoformat()转为标准日期字符串(如"2023-01-11"),比直接转字符串更规范
  • 对frozenset:转为普通列表,符合JSON数组格式
  • 递归处理:确保嵌套在属性中的特殊类型也能被正确转换

内容的提问来源于stack exchange,提问作者Tono Kuriakose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:20:41