我如何获得json的一部分?

时间:2015-01-01 22:00:31

标签: javascript jquery json

我使用jquery.get()来检索和存储一个对象,如下所示:

var cData = 
{
     "someitems":[
          {
               ...
          },
          {
               ...
          },
          {
               ...
          },
          .....
     ]
}

我需要保留我的结构,但只能获取数据集。意思是,获得0-3或4-10的记录,类似的东西。我尝试过像这样使用slice()

var newSet = cData.someitems.slice(0,4);

技术上有效,但我失去了json的结构。

---编辑--- 按@meagar请求:

我需要保持

的结构
{
     "someitems":[
          {
               ...
          },
          {
               ...
          },
          {
               ...
          },
          .....
     ]
}

3 个答案:

答案 0 :(得分:1)

您可以使用splice方法,该方法允许您就地修改数组:

var cData = 
{
     "someitems":[
          {
               ...
          },
          {
               ...
          },
          {
               ...
          },
          .....
     ]
}

cData.someitems.splice(0, 4); // This will remove the first 4 elements of the array

答案 1 :(得分:1)

这个问题的关键在于,在javascript中没有深度克隆对象的标准方法,如果您希望在多个范围内重复操作,那么这样做会更好一些 - 同时仍然保持围绕这些修改的JSON结构。

以下显然是为了考虑到实际的JSON数据可能比示例中使用的更复杂的事实。



var cData = {
     "someitems": [
          {"id": 'a'},
          {"id": 'b'},
          {"id": 'c'},
          {"id": 'd'},
          {"id": 'e'}
     ]
};

/// there are better ways to clone objects, but as this is
/// definitely JSON, this is simple. You could of course update
/// this function to clone in a more optimal way, especially as
/// you will better understand the object you are trying to clone.
var clone = function(data){
    return JSON.parse(JSON.stringify(data));
};

/// you could modify this method however you like, the key
/// part is that you make a copy and then modify with ranges
/// from the original
var process = function( data, itemRange ){
    var copy = clone(data);
    if ( itemRange ) {
        copy["someitems"] = data["someitems"].slice(
            itemRange[0],
            itemRange[1]
        );
    }
    return copy;
};

/// output your modified data
console.log(process(cData, [0,3]));




上面的代码应该输出一个具有以下结构的对象:

{
     "someitems": [
          {"id": 'a'},
          {"id": 'b'},
          {"id": 'c'}
     ]
}

...如果您更改process(cData, [0,3])的{​​{1}},您将获得:

process(cData, [3,5])
  

注意:请注意,在切片操作后,新的 { "someitems": [ {"id": 'd'}, {"id": 'e'} ] } 数组会重新编入索引,因此您会在someitems处找到{id: 'd'}偏移0,而不是3

答案 2 :(得分:0)

如果您想要前3个项目,可以使用它:

newnode = {"someitems" : cData.someitems.slice(0,3)}