我无法解决我做错的事情,但当我发送下一个curl请求时,我收到错误:
echo {"id":1,"question":"aaa"},{"id":2,"question":"bbb?"} | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers
HTTP/1.1 100 (Continue)
HTTP/1.1 400 Bad Request
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 100
{"error":true,"errorMessage":"failed to parse json object: expecting EOF","code":400,"errorNum":600}
有什么想法吗?我把它包起来[
...... ]
。什么都没有帮助。
使用[
... ]
验证程序将此标记为有效
与D.相同。这是我的代码:
void sendQuestionsToArangoDB(Json questions)
{
string collectionUrl = "http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers";
auto rq = Request();
rq.verbosity = 2;
string s = `{"id":"1","question":"foo?"},{"id":2}`;
auto rs = rq.post(collectionUrl, s, "application/json");
writeln("SENDED");
}
-
POST /_db/otest/_api/document/?collection=sitetestanswers HTTP/1.1
Content-Length: 37
Connection: Close
Host: localhost:8529
Content-Type: application/json
HTTP/1.1 400 Bad Request
Server: ArangoDB
Connection: Close
Content-Type: application/json; charset=utf-8
Content-Length: 100
100 bytes of body received
对于D我使用此lib:https://github.com/ikod/dlang-requests 与振动相同的问题。
答案 0 :(得分:3)
ArangoDB不了解JSON,如果它来自像[...]
那样的数组。它应该作为键值传递。因此,如果你需要传递数组,它应该有键mykey : []
。
这是工作代码:
import std.stdio;
import requests.http;
void main(string[] args)
{
string collectionUrl = "http://localhost:8529/_db/otest/_api/document?collection=sitetestanswers";
auto rq = Request();
rq.verbosity = 2;
string s = `{"some_data":[{"id":1, "question":"aaa"},{"id":2, "question":"bbb"}]}`;
auto rs = rq.post(collectionUrl, s, "application/json");
writeln("SENDED");
}
otest
- 数据库名称
sitetestanswers
- 集合名称(应在DB中创建)
答案 1 :(得分:1)
echo '[{"id":1,"question":"aaa"},{"id":2,"question":"bbb?"}]'
应该做的伎俩。你需要在JSON周围加上滴答声。数组括号是必要的,否则这是无效的JSON。
答案 2 :(得分:1)
您正在尝试发送多个文档。原始问题中的数据用逗号({"id":1,"question":"aaa"},{"id":2,"question":"bbb?"}
)分隔文档,这是无效的JSON。因此,来自ArangoDB的failed to parse json object
答案。
将文档放入尖括号([ ... ]
),因为一些评论员建议将使请求有效负载再次成为有效的JSON。
但是,您要将数据发送到处理单个文档的服务器端点。 POST /_api/document/?collection=...
的API目前一次只接受一个文档。它不适用于单个请求中的多个文档。它需要一个JSON对象,每当发送不同的东西时,它都会以错误代码响应。
如果您正在寻找批量插入内容,请尝试使用此处手册中所述的API POST /_api/import
:https://docs.arangodb.com/HttpBulkImports/ImportingSelfContained.html
这将在单个请求中使用多个文档。 ArangoDB 3.0还允许将多个文档发送到POST /_api/document?collection=...
API,但此版本尚未发布。不过,很快就会提供技术预览。