以正确的顺序循环遍历json文件

时间:2014-12-16 18:27:38

标签: jquery json

我正在尝试循环浏览json文件以创建上一页和下一页。

所以我的意思是:

<a href="Link to next page">Next</a>
<a href="Link to previous page">Previous</a>

代替href,需要链接到产品。此链接位于JSON文件中。

{
    "collection": {
        "9409555": {
            "id": 9409555,
            "url": "lola-dress-9409555.html"
        },
        "9806609": {
            "id": 9806609,
            "url": "kimono-dress.html",
        }, //and 20 product more...

我正在努力实现这一目标的最佳方法。如何确定循环中的“位置”以及如何确定下一个或上一个值是什么。

脚本

 $.getJSON('link-to-json-file/?format=json', function(data){
        $.each(data.products, function(key, product){
          console.log(key, product);
        });
      });

我知道我可以循环遍历上面的json对象。任何人都可以给我一些方向,一个好方法。任何帮助都是受欢迎的!

2 个答案:

答案 0 :(得分:0)

根据您的JSON结构,您可以这样做:

  $.getJSON('link-to-json-file/?format=json', function(data){
    var pos = 0;
    for(var key in data.collection){
       console.log(pos);           
       console.log(key);
       console.log(data.collection[key].id);
       console.log(data.collection[key].url);
       pos++;
    });
  });

如果您的JSON具有数组结构,那么您可以使用$ .each

{
    "collection": [
        {
            "id": 9409555,
            "url": "lola-dress-9409555.html"
        },
        {
            "id": 9806609,
            "url": "kimono-dress.html",
        }
     ]
}

  $.getJSON('link-to-json-file/?format=json', function(data){
    $.each(data.callection, function(index, product){
      console.log(index); //this is the position 0, 1, 2 ...
      console.log(product);
    });
  });

答案 1 :(得分:0)

这感觉非常hacky,但我能想到的唯一方法就是在你做的时候遍历对象,并在raw {{1}中找到product属性的索引(例如"9806609": {) }}

这非常假设它是按照您发布的方式形成的,并且responseText中没有其他文本可以匹配。你可以通过在冒号之前和之后剥去新的线条和空格来使它更安全一些。

responseText

您可以使用简单的数组搜索找到索引:

// will store the final products
var products = [];

$.getJSON('link-to-json-file/?format=json', {}, function (data, textStatus, jqXhr) {
    // loop through object, adding the ID, product and position of "pid": in the jqXhr.responseText
    var sortProducts = [];
    $.each(data.collection, function(key, product){
        sortProducts.push({
            pid: key,
            product: product,
            pos: jqXhr.responseText.indexOf('"'+key+'":')
        });
    });

    // now sort the products by their position and store in the final array
    products = sortProducts.sort(function(a,b) {
        return a.pos - b.pos;
    });
});

当然,如果订单对您很重要,那么创建function findProductIndex(pid) { var prodIndex = -1; for(var i = 0; i < products.length; i++) { if(products[i].pid == pid) { return i; } } } var idx = findProductIndex('9806609'); 作为数组是可行的方法,您将立即获得已排序的数组:

collection