ArangoDB无法使用curl发送请求

问题描述 投票:0回答:3

我无法理解我做错了什么,但是当我使用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,我使用这个库:https://github.com/ikod/dlang-requests 与vibed同样的问题。

http post curl d arangodb
3个回答
3
投票

ArangoDB 不理解 JSON,如果它是像

[...]
这样的 ass 数组。它应该作为键值传递。因此,如果您需要传递数组,它应该有键
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
- 集合名称(应在数据库中创建)


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

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


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/3.11/develop/http/import/
这将在单个请求中处理多个文档。 ArangoDB 3.0 还将允许向 POST

/_api/document?collection=...

API 发送多个文档,但该版本尚未发布。不过,技术预览版很快就会推出。

    

© www.soinside.com 2019 - 2024. All rights reserved.