1

为什么我的 CouchDB 视图结果中包含十六进制数字?我怎样才能摆脱它们?

7f
{"total_rows":108,"offset":0,"rows":[
{"id":"5c718dbd01bc0cde8152e08ed6003405","key":"2013-03-19T22:43:27.2683661Z","value":0}
5b
,

...

{"id":"5c718dbd01bc0cde8152e08ed6037404","key":"2013-03-19T23:07:35.5972058Z","value":0}
5b
,
{"id":"5c718dbd01bc0cde8152e08ed60376e5","key":"2013-03-19T23:07:35.6062063Z","value":0}
4

]}
1

0

TL;博士

我是 CouchDB 的新手,正在研究将其用作事件日志的数据库。我创建了一个简单的地图函数来按日期查看事件日志:

function(doc)
{
    if (doc.DateTime)
    {
        emit(doc.DateTime, doc);
    }
}

当我使用 Fiddler 通过以下请求测试此视图时:

GET http://localhost:5984/stuff/_design/eventlog/_view/datetime

Host: localhost:5984
User-Agent: Fiddler

返回的结果包括不属于 JSON 结构的十六进制数字。因此返回的 JSON 无效。为什么这些十六进制数字包含在结果中,我怎样才能摆脱它们?

我正在使用 Windows (x86) CouchDB 1.2.1 版。

4

2 回答 2

2

奇怪的十六进制数字用于所谓的分块传输编码。这是一种让 HTTP 响应以流格式可用的方式,而不是客户端必须等待整个响应准备好。十六进制数字表示下一个块的长度。

我认为分块的使用与请求的 Accept 值无关,但我不确定。

于 2013-03-20T10:29:24.770 回答
-1

要获得纯 JSON 结果,您必须Accept: application/json在 HTTP 请求中包含标头。

如果您省略Accept标头,CouchDB 将以更适合在 Web 浏览器中良好显示的方式返回结果。结果将采用 JSON 格式,但具有 text/plain内容类型。

请参阅Apache CouchDB 1.3 手册第 2.2.1 节。请求标头

十六进制数是分块传输编码的结果。

于 2013-03-20T01:34:34.657 回答