【问题标题】:How to get past the "total_rows" when parsing JSON from CouchDB从 CouchDB 解析 JSON 时如何通过“total_rows”
【发布时间】:2011-08-15 19:12:15
【问题描述】:

我正在使用以下 jQuery 代码从 CouchDB 获取 JSON 文件。

Function getURL() {
   var api_url = 'http://127.0.0.1:5984/couchcontentqueue/_design/DocCollections/_view/view_all_by_url_name?key="favorite-flickr-photos"&?callback=?';

   $.getJSON(api_url, function(json) {
      var type = json.type;
      var desc = json.description;
      $("#dropBox h3").html(type);
      $("#dropBox p").html(desc);
   });
};

当我对该 URL 执行 GET 时,它会返回以下内容:

{
    "total_rows":6,
    "offset":5,
    "rows":[
        {"id":"f5ba37e5af406ab079d596f7a1f30a2d","key":....}
    ]
}

Firebug 给我以下错误: 无效标签 http://127.0.0.1:5984/couchcontentqueue/_design/DocCollections/_view/view_all_by_url_name?key=%22favorite-flickr-photos%22&?callback=jsonp1304111285023 1号线

我不知道如何越过第一行以获取实际的 JSON 对象。有任何想法吗?谢谢。

【问题讨论】:

  • 您能否发布更多 JSON 并说明您想要访问哪些特定属性?
  • 这个特定的 JSON 文件有指向其他文档的指针。我希望能够访问密钥以及文档中的所有项目。 {"total_rows":6,"offset":5,"rows":[ {"id":"f5ba37e5af406ab079d596f7a1f30a2d","key":"favorite-flickr-photos","value":{"_id":"f5ba37e5af406ab079d596f7a1f30a2d ","_rev":"2-e25334d60ab7d2c1753d8871a5abc33d","doc_type":"DocCollections","url_name":"favorite-flickr-photos","name":"Flickr 照片","content1":"f5ba37e5af406ab079d596f7a175ab4a", "user":"tabdon","content5":"f5ba37e5af406ab079d596f7a157a953"}} ]}

标签: jquery couchdb


【解决方案1】:

?callback=

您似乎正在尝试执行 JSONP 请求,但是:

{"total_rows":6, ...

是纯 JSON 响应,而不是 JSONP 调用。如果您不是要进行跨域 JSONP 请求,请去掉 callback 参数,让 jQuery 将响应解析为普通 JSON。

如果您确实需要执行跨域 JSONP 请求,并且您了解这样做的安全风险,请确保您使用的是最新的 CouchDB 版本并添加指令:

allow_jsonp = true

[http] 部分中的.ini 文件。

标签无效

是当您尝试执行/eval 包含 JSON 对象的字符串时得到的。 JS 解析的一个怪癖是 {"x": "foo"} 中的 "x" 在语句块中被视为 JavaScript '标签'(很少用于 continue 语句),而不是对象文字表达式中的对象属性名称。

当 jQuery 认为您正在执行 JSONP 请求时,它将使用脚本执行而不是 JSON 解析。在你的 URL 中添加“callback=”参数会神奇地让它认为。

【讨论】:

  • 谢谢 - 你让我走上了正轨。通过使用本地 json 文件而不是从 CouchDB 服务器中提取,我能够弄清楚(理论上,无论如何).getJSON 不知道如何处理该 JSON 字符串的第一部分。一旦我让 CouchDB 服务器给我一个没有 total_rows 内容的 JSON 回复,我就能够成功解析它。我对 JSON 还不是很熟悉,所以也许有办法绕过 total_rows 的东西。
【解决方案2】:
var key = json.rows[0].key;
var doctype = json.rows[0].value.doc_type;

以此类推……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2013-08-04
    • 2021-01-22
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多