为什么CouchDB的视图结果中包含十六进制数字?

时间:2013-03-20 01:30:43

标签: couchdb

为什么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; DR

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

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。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-1)

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

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

请参阅Apache CouchDB 1.3 Manual Section 2.2.1. Request Headers

十六进制数是Chunked transfer encoding的结果。