通过Cypher导入json文件时出现Neo4j错误

通过Cypher导入json文件时出现Neo4j错误,neo4j,cypher,neo4j-apoc,bloodhound,Neo4j,Cypher,Neo4j Apoc,Bloodhound,我试图将一个猎犬/SharpHound json文件导入Neo4j,但遇到以下错误: { Neo4j仅支持存储为单例或数组属性的密码类型子集。有关更多详细信息,请参阅手册的Cypher/syntax/values部分:1 } 这是我的剧本: call apoc.periodic.iterate(' call apoc.load.json("file:///sessions/20190822113758_groups.json") yield value ',' create (n:Groups)

我试图将一个猎犬/SharpHound json文件导入Neo4j,但遇到以下错误:

{ Neo4j仅支持存储为单例或数组属性的密码类型子集。有关更多详细信息,请参阅手册的Cypher/syntax/values部分:1 }

这是我的剧本:

call apoc.periodic.iterate('
call apoc.load.json("file:///sessions/20190822113758_groups.json") yield value
','
create (n:Groups) SET n += value
',{batchSize:10000})
这是json文件中的内容:

{"domains":[{"Properties":{"objectsid":"S-1-2-2515432156546548","highvalue":true,"domain":"somethingone.COM"},"Name":"somethingone.COM","Links":null,"Trusts":[{"TargetName":"some.somethingtwo.COM","IsTransitive":true,"TrustDirection":2,"TrustType":"External"},{"TargetName":"something-three.COM","IsTransitive":true,"TrustDirection":2,"TrustType":"ParentChild"},{"TargetName":"somethingfour.COM","IsTransitive":true,"TrustDirection":0,"TrustType":"External"}],"Aces":null,"ChildOus":null,"Computers":null,"Users":null}],"meta":{"count":1,"type":"domains"}}

Neo不支持作为贴图或贴图数组的节点上的属性。例如,以下两项工作均不适用:

CREATE (n: Group) SET n.prop = { key: "value" }

Neo.ClientError.Statement.TypeError: Property values can only be of primitive types or arrays thereof
第二个是您看到的错误,但它们基本上是等效的-您试图使用不受支持的数据类型向节点添加属性。如果您查看JSON文件,域映射本身就是一个映射数组,它本身包含更多的映射

您需要考虑从JSON文件生成的图形结构是什么,然后,您可能需要解开value.domains数组,通过遍历表示JSON的嵌套映射来创建节点和属性,而不是仅仅创建n:Group n+=value

例如,以下操作将使用“Name”属性创建组节点,并使用信任数组中的信息创建信任节点:


您可能会发现您需要多次调用apoc.load.json并分部分创建图形-可能首先创建组,然后创建信任,然后创建属性,等等。在示例json文件中,很难区分所有空值。

错误显示,json中的值不属于受支持的类型。你能分享示例JSON吗?我在@Raj上面添加了JSON文件的内容
CREATE (n: Group) SET n.prop = [{ key: "value" }, { key: "value" }]

Neo.ClientError.Statement.TypeError: Neo4j only supports a subset of Cypher types for storage as singleton or array properties. Please refer to section cypher/syntax/values of the manual for more details.
call apoc.load.json("file:///sessions/20190822113758_groups.json") yield value
UNWIND value.domains as domain
MERGE (g: Group { Name: domain.Name })
WITH g, domain.Trusts as trusts
UNWIND trusts as trust
MERGE (t: Trust { TrustType: trust.TrustType, TrustDirection: trust.TrustDirection, TargetName: trust.TargetName, IsTransitive: trust.IsTransitive })
MERGE (t)-[:BELONGS_TO]->(g)
RETURN t, g