如何获取 json 的一部分?
How do I get portions of a json?
我已经使用 jquery.get()
检索和存储对象,类型如下:
var cData =
{
"someitems":[
{
...
},
{
...
},
{
...
},
.....
]
}
我需要保留我的结构但只获取集合中的数据。意思是,获取记录 0-3 或 4-10,诸如此类。我试过像这样使用 slice()
:
var newSet = cData.someitems.slice(0,4);
这在技术上可行,但我丢失了 json 的结构。
--- 编辑 ---
根据@meagar 请求:
我需要维护
的结构
{
"someitems":[
{
...
},
{
...
},
{
...
},
.....
]
}
您可以使用 splice
方法,该方法允许您就地修改数组:
var cData =
{
"someitems":[
{
...
},
{
...
},
{
...
},
.....
]
}
cData.someitems.splice(0, 4); // This will remove the first 4 elements of the array
如果您想要前 3 项,您可以使用这个:
newnode = {"someitems" : cData.someitems.slice(0,3)}
这个问题的关键是 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])
更改为 process(cData, [3,5])
,您将得到:
{
"someitems": [
{"id": 'd'},
{"id": 'e'}
]
}
NOTE: bear in mind that after the slice operation the new someitems
array is re-indexed, so you will find {id: 'd'}
at offset 0
, and not 3
我已经使用 jquery.get()
检索和存储对象,类型如下:
var cData =
{
"someitems":[
{
...
},
{
...
},
{
...
},
.....
]
}
我需要保留我的结构但只获取集合中的数据。意思是,获取记录 0-3 或 4-10,诸如此类。我试过像这样使用 slice()
:
var newSet = cData.someitems.slice(0,4);
这在技术上可行,但我丢失了 json 的结构。
--- 编辑 --- 根据@meagar 请求:
我需要维护
的结构{
"someitems":[
{
...
},
{
...
},
{
...
},
.....
]
}
您可以使用 splice
方法,该方法允许您就地修改数组:
var cData =
{
"someitems":[
{
...
},
{
...
},
{
...
},
.....
]
}
cData.someitems.splice(0, 4); // This will remove the first 4 elements of the array
如果您想要前 3 项,您可以使用这个:
newnode = {"someitems" : cData.someitems.slice(0,3)}
这个问题的关键是 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])
更改为 process(cData, [3,5])
,您将得到:
{
"someitems": [
{"id": 'd'},
{"id": 'e'}
]
}
NOTE: bear in mind that after the slice operation the new
someitems
array is re-indexed, so you will find{id: 'd'}
at offset0
, and not3