1

我将c结构存储到couchbase,这样做是为了以后可以读回这些结构并直接处理,我避免了1)C结构-> JSON同时存储和2)JSON-> C结构同时检索的步骤.

这在我使用 lcb_get() 和 lcb_set() 时效果很好,但我还需要使用 REST 模型和 lcb_make_http_request () 调用来访问视图。

所以我想知道 lcb_make_http_request () 将如何处理我的非 JSON C 结构,它是十六进制数据,中间可能有空值。在调用 lcb_make_http_request () 之后,我是否仍然能够使用作为 HTTP 响应获得的数据提取和填充我的 C 结构?

4

1 回答 1

3

正如WiredPrairie 在他的评论中所说,您不必强制使用 JSON 并且可以存储 C 结构,但在这样做时请记住字节顺序字段对齐。

当服务器检测到您的数据不是 JSON 格式时,它将使用 base64 对其进行编码,并设置meta.type"json"文档何时进入地图功能。

如果您想在 HTTP 流中获取值,您将能够将完整的文档作为值发出。在这个简单的地图功能的情况下:

function (doc, meta) {
  if (meta.type == "base64") {
    emit(meta.id);
  }
}

你会得到这样的回应(为了清楚起见,我已经格式化了):

{
    "total_rows": 1,
    "rows": [
        {
            "id": "foo",
            "key": "foo",
            "value": "4KwuAgAAAAA="
        }
    ]
}

这确实意味着您必须使用一些 json 解析器"value"从结果中提取属性,对其进行解码,您将获得完全相同的字节流,您已经使用 SET 命令发送了它。

于 2013-06-14T18:23:21.733 回答