ArangoDB无法使用curl发送请求

sczxawaw  于 2023-09-28  发布在  Go
关注(0)|答案(3)|浏览(119)

我不能理解我做错了什么,但是当我用curl发送下一个请求时,我得到了错误:

  1. echo {"id":1,"question":"aaa"},{"id":2,"question":"bbb?"} | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers
  2. HTTP/1.1 100 (Continue)
  3. HTTP/1.1 400 Bad Request
  4. Server: ArangoDB
  5. Connection: Keep-Alive
  6. Content-Type: application/json; charset=utf-8
  7. Content-Length: 100
  8. {"error":true,"errorMessage":"failed to parse json object: expecting EOF","code":400,"errorNum":600}

有办法吗?我把它绑在[上了... ].没有什么是没有帮助的。关于[]验证程序将此标记为有效
与D相同。下面是我的代码:

  1. void sendQuestionsToArangoDB(Json questions)
  2. {
  3. string collectionUrl = "http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers";
  4. auto rq = Request();
  5. rq.verbosity = 2;
  6. string s = `{"id":"1","question":"foo?"},{"id":2}`;
  7. auto rs = rq.post(collectionUrl, s, "application/json");
  8. writeln("SENDED");
  9. }

--

  1. POST /_db/otest/_api/document/?collection=sitetestanswers HTTP/1.1
  2. Content-Length: 37
  3. Connection: Close
  4. Host: localhost:8529
  5. Content-Type: application/json
  6. HTTP/1.1 400 Bad Request
  7. Server: ArangoDB
  8. Connection: Close
  9. Content-Type: application/json; charset=utf-8
  10. Content-Length: 100
  11. 100 bytes of body received

对于D,我使用这个库:https://github.com/ikod/dlang-requests与vibed相同的问题。

7vhp5slm

7vhp5slm1#

ArangoDB不理解JSON,如果它是像[...]这样的数组。它应该作为key-value传递。所以如果你需要传递数组,它应该有键mykey : []
下面是工作代码:

  1. import std.stdio;
  2. import requests.http;
  3. void main(string[] args)
  4. {
  5. string collectionUrl = "http://localhost:8529/_db/otest/_api/document?collection=sitetestanswers";
  6. auto rq = Request();
  7. rq.verbosity = 2;
  8. string s = `{"some_data":[{"id":1, "question":"aaa"},{"id":2, "question":"bbb"}]}`;
  9. auto rs = rq.post(collectionUrl, s, "application/json");
  10. writeln("SENDED");
  11. }

otest-数据库名称
sitetestanswers-集合名称(应在DB中创建)

展开查看全部
j2datikz

j2datikz2#

  1. echo '[{"id":1,"question":"aaa"},{"id":2,"question":"bbb?"}]'

应该可以你需要在JSON周围打勾。数组括号是必要的,否则这不是有效的JSON。

ttp71kqs

ttp71kqs3#

您正在尝试发送多个文档。原始问题中的数据用逗号({"id":1,"question":"aaa"},{"id":2,"question":"bbb?"})分隔文档,这是无效的JSON。因此,来自ArangoDB的failed to parse json object答案。
按照一些评论者的建议,将文档放入尖括号([ ... ])中,将使请求有效负载再次有效。
但是,您将数据发送到处理 * 单个 * 文档的服务器端点。POST /_api/document/?collection=...的API目前一次接受一个文档。它不能在一个请求中处理多个文档。它期望一个JSON对象,每当它被发送不同的东西时,它都会响应一个错误代码。
如果您正在寻找批量插入,请尝试API POST /_api/import,在手册中描述如下:https://docs.arangodb.com/3.11/develop/http/import/
这将在单个请求中处理多个文档。ArangoDB 3.0还将允许向POST /_api/document?collection=... API发送多个文档,但该版本尚未发布。技术预览将很快推出。

相关问题