0

我无法向 neo4j api 发送内容。这是我的请求的正文。

{
  "statements" : [ {
    "statement" : "Create (user:User{ name: "jon" }) Return user"
  } ]
}

我越来越:

{
    "results": [],
    "errors": [
        {
            "code": "Neo.ClientError.Request.InvalidFormat",
            "message": "Unable to deserialize request: Unexpected character ('j' (code 106)): was expecting comma to separate OBJECT entries\n at [Source: HttpInputOverHTTP@7481578b; line: 3, column: 45]"
        }
    ]
}

我的代码实际上有什么问题?当我在那里只有 1 个属性时,为什么会出现逗号?

我试过这个:(更好的格式)

"statement" : "CREATE ( user:User { name: "jon" } ) Return user"

同样的错误。以此为原型:

"statement" : "CREATE ( bike:Bike { weight: 10 } ) Return bike"

哪个工作得很好。它来自文档。

唯一的区别是字符串。但是我还应该如何编码jon

因为这:

"statement" : "CREATE ( user:User { name: jon } ) Return user"

也不行。

我觉得这很反直觉。 任何帮助表示赞赏:) 也许您可以提供一些解释为什么这是必要的。谢谢 :)

编辑

基于@cybersam 的回答 - 我意识到我忘了转义字符串。

然而这:

"statement" : "CREATE (user:User{\"name\":\"jon\"}) Return user"

产生这个:

"errors": [
        {
            "code": "Neo.ClientError.Statement.SyntaxError",
            "message": "Invalid input '\"': expected whitespace, a property key name, '}', an identifier or UnsignedDecimalInteger (line 1, column 19 (offset: 18))\r\n\"CREATE (user:User{\"name\":\"jon\"}) Return user\"\r\n                   ^"
        }

我的代码使用模块从elixir mapsinto自动生成。我按照建议让 Posion 给我似乎没有用。jsonPoison{ name : 'jon' }

4

2 回答 2

1

JSON 字符串不能包含未转义的双引号 (")。

由于 Cypher 接受单引号和双引号来分隔字符串,因此解决此问题的最简单和最易读的方法是对嵌入的字符串文字使用单引号,如下所示:

"Create (user:User{ name: 'jon' }) Return user"

[编辑]

顺便说一句:不要费心试图逃避嵌入的双引号,因为这通常需要混乱且难以理解的代码。尝试使用同样使用相同方法转义字符的语言或软件来生成包含转义字符的字符串一点也不好玩。仅使用单引号要容易得多(并且应该适用于所有语言)。

于 2018-02-22T19:28:00.843 回答
0

这里的问题来自于有两个问题:

首先,在手动测试时 - 我忘了转义双引号。

其次,在实际程序中 - 我正在编码一个已经编码的长生不老药结构。双重编码。

我正在将此长生不老药地图:编码%{ name: "jon" }{\"name\": \"jon\"}json。

然后将它放在一个密码查询中 - 这是一个字符串:"Create (user:User{\"name\": \"jon\"}"

然后将此字符串放入预期的包装器中:%{ statement : "Create (user:User{\"name\": \"jon\"}" }这是一个长生不老药地图。

然后再次将此地图编码为json。道具现在在 json 中转义为 json。我疯了!

解决方案: 将道具插入parameters场地。取自neo4j http endpoing docs

{
  "statements" : [ 
    "statement" : "CREATE (user: User{props}) RETURN user",
    "parameters" : {
      "props" : {
        "name" : "jon"
      }
    } 
  ]
}

从中获得:

%{
  statements: [
    %{
      statement: "Create (user:User{props}) Return user",
      parameters: %{props: %{name: "jon"}}
    }
  ]
}
|> Poison.encode
于 2018-02-23T23:42:53.853 回答