Neo4j Cypher:通过获取导入嵌套集合错误:无法反序列化请求:意外字符代码99

Neo4j Cypher:通过获取导入嵌套集合错误:无法反序列化请求:意外字符代码99,neo4j,cypher,Neo4j,Cypher,我有嵌套的集合,我添加“数据”,然后为每个“数据”添加自己的“标记”。我找到了“数据”的展开,foreach找到了“标签”。 我想添加我从集合外部手动导入其信息的人员 我通过语句执行以下Cypher查询: 我模仿了: 及 我通过检查了我的json,并对其进行了验证 { "statements": [ { "statement": " WITH { "categories": [ {"dataid" : "11" , "dataname" : "data1" , "datalanguage

我有嵌套的集合,我添加“数据”,然后为每个“数据”添加自己的“标记”。我找到了“数据”的展开,foreach找到了“标签”。 我想添加我从集合外部手动导入其信息的人员

我通过语句执行以下Cypher查询: 我模仿了: 及 我通过检查了我的json,并对其进行了验证

{  "statements": [ {  "statement": " WITH {  "categories":  [ {"dataid" : "11" , "dataname" : "data1" , "datalanguage" : "en" , "datatype" : "type1" ,"content" : "content1" , "tags" : [{"myid" : "11" , "tagid" : 10 , "tagname" : "tag1" }] } , {"dataid" : "22" , "dataname" : "data2" , "datalanguage" : "en" , "datatype" : "type2" ,"content" : "content2" , "tags" : [{"myid" : "22" , "tagid" : 20 , "tagname" : "tag2" }] } ] } AS document  UNWIND document.categories AS category  MERGE (dt:Data {name: category.dataname}) ON CREATE SET dt.id = category.dataid , dt.type = category.datatype , dt.language = category.datalanguage , dt.content = category.datacontent   MERGE (p:Person { name : 'Mahsa' , lastname : 'Mahsa' } ) ON CREATE SET p.id =1 MERGE (p)-[r:owner]->(dt)  FOREACH (mytag IN category.tags |  MERGE (t:Tag {name: mytag.tagname}) ON CREATE SET t.id = mytag.tagid  MERGE (dt)-[r2:tagged { Freq : 12 ]->(t) )" } ] }
但它返回的结果是:(我多次检查是否有“意外字符”,但我找不到)

我将我的嵌套集合制作为:

string dataCollection2 = "{  \"categories\":  [ {\"dataid\" : \"11\" , \"dataname\" : \"data1\" , \"datalanguage\" : \"en\" , \"datatype\" : \"type1\" ," +
            "\"content\" : \"content1\" , \"tags\" : [{\"myid\" : \"11\" , \"tagid\" : 10 , \"tagname\" : \"tag1\" }] }" +
            " , {\"dataid\" : \"22\" , \"dataname\" : \"data2\" , \"datalanguage\" : \"en\" , \"datatype\" : \"type2\" ," +
            "\"content\" : \"content2\" , \"tags\" : [{\"myid\" : \"22\" , \"tagid\" : 20 , \"tagname\" : \"tag2\" }] } ] }";
var obj1 = JValue.Parse(@"'" + dataCollection2 + "'");
我将我的json导入到,并得到验证:

 {
"categories": [
    {
        "dataid": 11,
        "dataname": "data1",
        "datalanguage": "en",
        "datatype": "type1",
        "content": "content1",
        "tags": [
            {
                "myid": 11,
                "tagid": 10,
                "tagname": "tag1"
            }
        ]
    },
    {
        "dataid": 22,
        "dataname": "data2",
        "datalanguage": "en",
        "datatype": "type2",
        "content": "content2",
        "tags": [
            {
                "myid": 22,
                "tagid": 20,
                "tagname": "tag2"
            }
        ]
    }
]}

传递给RESTAPI的字符串的基本问题是没有传递合法的密码查询。Cypher属性“maps”看起来有点像JSON,而不是JSON

在您的案例中,重要的区别在于属性名称不能用双引号分隔。只有字符串属性值可以用双引号分隔

因此,
categories
dataId
dataName
等不能用双引号括起来


在查询的末尾也有一个输入错误
[r2:taged{Freq:12]
应该是
[r2:taged{Freq:12}]

用于将嵌套集合添加到neo4j:

{"id" : 1, "name" : "Data1", "language" : "en", "tags": {"id" : 11, "name": "tag 11" } } ,  {"id" : 2, "name": "Data2" , "tags": [ {"id" : 33, "name": "tag 33"} ,  {"id" : 44, "name": "tag44"} ] }
{  "statements": [ {  "statement": " UNWIND { datas } AS data  MERGE (p:Person { name : 'God' , lastname : 'God' } ) ON CREATE SET p.id =2 MERGE (d:Data {name: data.name}) ON CREATE SET d.id = data.id  , d.language = data.language   MERGE (p)-[r:owner]->(d)  WITH  d, data.tags AS mytags  UNWIND mytags AS mytag  MERGE (t:Tag {name: mytag.name}) ON CREATE SET t.id = mytag.id  MERGE (d)-[r2:tagged { Freq : 12 } ]->(t) " , "parameters":  { "datas" : [{"id" : 1, "name" : "Data1", "language" : "en", "tags": {"id" : 11, "name": "tag 11" } } ,  {"id" : 2, "name": "Data2" , "tags": [ {"id" : 33, "name": "tag 33"} ,  {"id" : 44, "name": "tag44"} ] }]  }  } ] }
首先:要将neo4j作为参数正确输入,我必须删除“{ “categories”:[]}从json的第一个和结尾开始

其次:我应该把这个json作为参数放到语句中

第三:我必须使用两个“UNWIND and WITH”(而不是使用foreach)将父行或子行的每一行从集合中分离出来

“Foreach”与“UNWIND and WITH”类似。 我的最终收集和查询是:

收藏:

{"id" : 1, "name" : "Data1", "language" : "en", "tags": {"id" : 11, "name": "tag 11" } } ,  {"id" : 2, "name": "Data2" , "tags": [ {"id" : 33, "name": "tag 33"} ,  {"id" : 44, "name": "tag44"} ] }
{  "statements": [ {  "statement": " UNWIND { datas } AS data  MERGE (p:Person { name : 'God' , lastname : 'God' } ) ON CREATE SET p.id =2 MERGE (d:Data {name: data.name}) ON CREATE SET d.id = data.id  , d.language = data.language   MERGE (p)-[r:owner]->(d)  WITH  d, data.tags AS mytags  UNWIND mytags AS mytag  MERGE (t:Tag {name: mytag.name}) ON CREATE SET t.id = mytag.id  MERGE (d)-[r2:tagged { Freq : 12 } ]->(t) " , "parameters":  { "datas" : [{"id" : 1, "name" : "Data1", "language" : "en", "tags": {"id" : 11, "name": "tag 11" } } ,  {"id" : 2, "name": "Data2" , "tags": [ {"id" : 33, "name": "tag 33"} ,  {"id" : 44, "name": "tag44"} ] }]  }  } ] }
查询:

{"id" : 1, "name" : "Data1", "language" : "en", "tags": {"id" : 11, "name": "tag 11" } } ,  {"id" : 2, "name": "Data2" , "tags": [ {"id" : 33, "name": "tag 33"} ,  {"id" : 44, "name": "tag44"} ] }
{  "statements": [ {  "statement": " UNWIND { datas } AS data  MERGE (p:Person { name : 'God' , lastname : 'God' } ) ON CREATE SET p.id =2 MERGE (d:Data {name: data.name}) ON CREATE SET d.id = data.id  , d.language = data.language   MERGE (p)-[r:owner]->(d)  WITH  d, data.tags AS mytags  UNWIND mytags AS mytag  MERGE (t:Tag {name: mytag.name}) ON CREATE SET t.id = mytag.id  MERGE (d)-[r2:tagged { Freq : 12 } ]->(t) " , "parameters":  { "datas" : [{"id" : 1, "name" : "Data1", "language" : "en", "tags": {"id" : 11, "name": "tag 11" } } ,  {"id" : 2, "name": "Data2" , "tags": [ {"id" : 33, "name": "tag 33"} ,  {"id" : 44, "name": "tag44"} ] }]  }  } ] }

您提供的json从
类别开始是不合法的。您提供的字符串是否正确?(另外,请使用4个字符的缩进,而不是
code>
来标记您的数据。)谢谢@cybersam。我模仿了,因为我想在一个rawOK中提取每个类别,但你说的数据经过验证,实际上没有验证。@cybersam我在问题末尾添加了我的json,请导入并获得结果。请查看我的答案。我检查了很多次,但仍然有相同的问题。如果你能得到答案,请告诉我ur neo4j版本