是否有一种优雅的方式将以下json数据转换为下面所需的数据格式?
原始数据
{
"data": [
{
"timestamp": 1385118121279,
"value": 40
},
{
"timestamp": 1385118301279,
"value": 7
}
]
}
所需格式
[[1385118121279,40],[1385118301279,7]]
答案 0 :(得分:1)
是的,有了这个:
var transformed = originalObj.data.map(function(item){
return [item.timestamp, item.value];
});
但是,在旧浏览器中不起作用。
适用于所有浏览器,包括旧浏览器:
var transformed = [];
for(var i in originalObj.data){
var item = originalObj.data[i];
transformed.push([item.timestamp, item.value]);
}
干杯
答案 1 :(得分:0)
这可以通过迭代对象来完成,我们可以得到我们想要的数组。
var abc ={
"data": [
{
"timestamp": 1385118121279,
"value": 40
},
{
"timestamp": 1385118301279,
"value": 7
}
]
};
var dataArray = [];
for (var key in abc.data) {
if(abc.data.hasOwnProperty(key)){
dataArray.push(abc.data[key].timestamp);
}
}
console.log(dataArray);
答案 2 :(得分:0)
我不确定这是否“优雅”,但无论如何:
function obj2arr(obj){
if(obj instanceof Array){
var ret=[];
for(var i=0;i<obj.length;i++){
if(typeof obj[i]=="object"){
ret.push(obj2arr(obj[i]));
}else{
ret.push(obj[i]);
}
}
return ret;
}else if(typeof obj=="object"){
var ret=[];
var keys=Object.getOwnPropertyNames(obj);
for(var i=0;i<keys.length;i++){
if(typeof obj[keys[i]]=="object"){
ret.push(obj2arr(obj[keys[i]]));
}else{
ret.push(obj[keys[i]]);
}
}
return ret;
}else{
return obj;
}
}
以下测试:
console.log(obj2arr({
"data": [{
"timestamp": 1385118121279,
"value": 40
},{
"timestamp": 1385118301279,
"value": 7
}]
}));
输出:
[ [ [ 1385118121279, 40 ], [ 1385118301279, 7 ] ] ]
Online demo(我很惊讶Ideone
中的JS引擎不支持Object.getOwnPropertyNames
)
虽然请注意这是一个递归解决方案,所以大对象可能会导致堆栈溢出...