2016-05-06 9 views
1

DBにIPアドレスが指定されているかどうかを確認する必要があります。AQLリクエストで何が問題になっていますか?

この要求:

{"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 

echo {"query" : "FOR v in visitors 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":...

+0

答えがあなたのために機能しましたか?はいの場合は、「受け入れ」とマークできますか?そうでない場合、何が欠けていますか? – dothebart

答えて

2

あなたはAQLクエリの内部に引用符を使用する場合は、単一引用符を使用する必要がある、またはそれらをエスケープのいずれかので、あなたのJSONのポスト文書が有効です。

あなたは簡単すなわち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" 
} 

私は私たちですここでは文書(<<EOF)をbashに入れているので、別のレベルの引用を避けることができます。

+0

@dothebartが言ったことを明確にするだけです。エラーはAQLではなくJSON要求本体にあります。 JSON文字列は常に二重引用符で囲まれているため、文字列内で使用したい二重引用符をエスケープする必要があります。 –

関連する問題