使用apoc.load.json导入JSON数据时遇语法错误求助
解决Apoc.load.json导入时的Variable
value未定义错误 嘿,我来帮你搞定这个问题!你遇到的Neo.ClientError.Statement.SyntaxError: Variable 'value' not defined错误,本质是因为你的Cypher语句结构出了问题——value变量是由CALL apoc.load.json(...) YIELD value返回的,但后续的UNWIND子句没有和它处于同一个语句上下文里,导致Neo4j找不到这个变量。
修正后的完整Cypher语句
结合你要建立的University --child--> Class --child--> Student关系,正确的导入语句应该是这样的:
CALL apoc.load.json("FILE:///C:/tmp/input.json") YIELD value UNWIND value.university AS university // 创建大学节点 MERGE (u:University {id: university.id, name: university.name}) UNWIND university.class AS class // 创建班级节点并关联到对应的大学 MERGE (c:Class {id: class.id, name: class.name}) MERGE (u)-[:child]->(c) UNWIND class.student AS student // 创建学生节点并关联到对应的班级 MERGE (s:Student {id: student.id, name: student.name}) MERGE (c)-[:child]->(s)
关键注意事项
- 语句上下文要连续:所有依赖
value的子句(比如后面的三个UNWIND)必须紧跟在YIELD value之后,属于同一条完整的Cypher语句,不能拆分成多个单独执行的片段。之前的错误大概率是因为你把语句拆分执行,导致value变量在后续步骤中丢失了。 - JSON结构要匹配:你的input.json需要和语句中的路径对应,比如结构应该类似:
{ "university": [ { "id": "u001", "name": "北京大学", "class": [ { "id": "c001", "name": "计算机科学实验班", "student": [ { "id": "s001", "name": "小明" }, { "id": "s002", "name": "小红" } ] } ] } ] }
如果JSON里的字段名和语句里的不一致(比如把university写成了universities),也会导致后续步骤出错,记得核对字段名。
内容的提问来源于stack exchange,提问作者Shawn
相关产品推荐
相关产品推荐

