发出从cURL命令行将JSON文档从文件加载到CouchDB中的问题

时间:2016-04-27 17:21:00

标签: json curl couchdb bulkinsert

我在Windows平台上,我在 c:\ Temp目录中有一个名为 agent_import.json 的文件。

该文件包含以下测试JSON文档,据我所知,这些文档是有效的JSON:

{
    docs: [{
        "_id": "11",
        "name11": "test11"
    }, {
        "_id": "12",
        "name12": "test12"
    }]
}

我在Windows上安装了名为代理的CouchDB安装和测试数据库。

从cURL命令行执行:

curl -vX POST -H "Content-Type":"application/json" -d @c:\Temp\agent_import.json http://127.0.0.1:5984/agents/_bulk_docs

上面的curl命令失败了,抱怨JSON。

*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 5984 (#0)
> POST /agents/_bulk_docs HTTP/1.1
> Host: 127.0.0.1:5984
> User-Agent: curl/7.48.0
> Accept: */*
> Content-Type:application/json
> Content-Length: 25
>
* upload completely sent off: 25 out of 25 bytes
< HTTP/1.1 400 Bad Request
< Server: CouchDB/1.6.1 (Erlang OTP/R16B02)
< Date: Wed, 27 Apr 2016 16:42:51 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 48
< Cache-Control: must-revalidate
<
{"error":"bad_request","reason":"invalid_json"}
* Connection #0 to host 127.0.0.1 left intact

我已经尝试更改Json文件的内容,以便每个双引号都使用下面列出的反斜杠进行处理但是上面的错误相同......

{
    docs: [{
        \"_id\": \"11\",
        \"name11\": \"test11\"
    }, {
        \"_id\": \"12\",
        \"name12\": \"test12\"
    }]
}

我见过人们发布类似问题但不完全相同所以我想问一下我在做curl命令和/或我对 _bulk_docs

此致

2 个答案:

答案 0 :(得分:1)

首先,您要发布的json无效 - docs 应该在引号中。正确的是:

StringBuilder sb = new StringBuilder();

foreach (DictionaryEntry de in Assembles)
{
    foreach (var us in de.Value.ToString().Split(new char[] { ';' }))
    {
        if (!string.IsNullOrWhiteSpace(us))
            sb.AppendLine("using " + us + ";");
    }
}

sb.AppendLine("namespace " + Namespace + "\n{");            
sb.AppendLine(GetClassCode());

if(withMainFunc)
{
    sb.AppendLine(@"static class Program
                    {

                    [STAThread]
                    static void Main()
                    { 
                        //some init code                                                       
                    }
                }");
}
sb.AppendLine("}");

您始终可以使用jq等工具验证文件。我刚试过他在Windows上更新了文件和卷曲7.48.0,它确实有效。或者,您可以尝试使用 - data-binary

选项

答案 1 :(得分:0)

如果您查看卷曲标题,可以看到第一条线索:

Content-Length: 25

您应该清楚,没有任何数量的小提取会使您的JSON内容减少到25个字节。

另一方面,字符串:@c:\Temp\agent_import.json是27个字节,假设那些\被视为转义,它恰好是25个字节。

不知道你的curl版本是如何工作的,但它似乎没有像{nix版本那样处理@基于-d的文件输入。