AQL请求有什么问题?

时间:2016-05-06 17:22:29

标签: json http curl arangodb aql

我需要检查数据库是否指定了IP地址。

此请求:

echo {"query" : "FOR v in visitors return v.guid"} | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/cursor

返回我的下一个结果:

{"result":["7478d52d-af3e-4a83-9791-4e827dfe9059",null,"8d324b9e-7376-4977-9976-1606045c7086"],"hasMore":false,"cached":false,"extra":{"stats":{"writesExecuted":0,"writesIgnored":0,"scannedFull":3,"scannedIndex":0,"filtered":0,"executionTime":0},"warnings":[]},"error":false,"code":201}

但是当我发送FILTER的请求时:

echo {"query" : "FOR v in visitors FILTER v.ip == "127.0.0.1" return v.guid"} | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/cursor

我收到错误:

HTTP/1.1 400 Bad Request
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 73

{"error":true,"errorMessage":"expecting comma","code":400,"errorNum":600}

我做错了什么?

此外,如何在没有请求元数据的情况下获取结果,例如:..."hasMore":false,"cached":...

1 个答案:

答案 0 :(得分:2)

如果在AQL查询中使用引号,则需要使用单引号,或者转义它们以使json post文档保持有效。

您可以使用jq轻松重新验证您的json:

cat <<EOF |jq . 
{"query" : "FOR v in visitors FILTER v.ip == "127.0.0.1" return v.guid"}
EOF

parse error: Invalid numeric literal at line 1, column 56

并通过用单引号替换内部双引号来修复它:

cat <<EOF |jq . 
{"query" : "FOR v in visitors FILTER v.ip == '127.0.0.1' return v.guid"}
EOF

{
  "query": "FOR v in visitors FILTER v.ip == '127.0.0.1' return v.guid"
}

或使用\转义双引号:

cat <<EOF |jq . 
{"query" : "FOR v in visitors FILTER v.ip == \"127.0.0.1\" return v.guid"}
EOF
{
  "query": "FOR v in visitors FILTER v.ip == \"127.0.0.1\" return v.guid"
}

请注意,我在bash中使用此处的文档(<<EOF),因此可以避免引用其他级别的引用。