如何迭代此 json 结构以生成另一个结构?
How do I iterate over this json structure to produce another structure?
我有这个json结构。
x=[{
"value": 1.37,
"date_transacted": "2015-01-01"
}]
根据这个 json 结构,我想生成以下 json 结构;
y1=[{
c: [{
v: "2015-01-01"
},
{
v: "1.37"
}]
}]
我已经编写了执行此操作的代码。看起来像这样;
var y1 = [{ c:[ {"v":x[0].value}, {"v":x[0].date_transacted} ] }];
当 x
有几个 json key/value 对时,我的问题就来了。看起来像这样的东西;
x=[{
"value": 1.37,
"date_transacted": "2015-01-01"
},
{
"value": 1.62,
"date_transacted": "2015-02-01"
},
{
"value": 1.83,
"date_transacted": "2015-03-01"
}]
通过对象数组迭代我的代码以生成所需的 json 结构的有效方法是什么?
y=[{
c: [{
v: "2015-01-01"
},
{
v: "1.37"
}]
},
{
c: [{
v: "2015-01-02"
},
{
v: "1.62"
}]
},
{
c: [{
v: "2015-01-03"
},
{
v: "1.83"
}]
}]
var y1=[];
for(var i=0;i<x.length;i++){
y1[i]= [{ c:[ {"v":x[i].value}, {"v":x[i].date_transacted} ] }];
}
作为单个语句:
y = x.map(function(e)
{
return {
c:
[
{
v: e.value
},
{
v: e.date_transacted
}
]
};
});
只有当 x 中的对象具有确切的 2 个属性时,其他两个答案才有效。
一种不考虑属性数量的方法:
y = [];
for(var i = 0, i < x.length; i++){
var obj = {c:[]};
for(var prop in x[i]){
obj.c.push({v:x[i][prop]})
}
y.push(obj);
}
编辑:使用地图
y = x.map(function(e)
{
var obj = {c: []};
for(var prop in e){
obj.c.push({v:e[prop]})
}
return obj;
});
此处的其他答案(@user2415266 除外)不是动态的、硬编码的以接受确切的输入,并且不是特别可重用。如果您拥有超过 2 个属性,或者在@Siguza 的情况下,如果您的属性未被称为 'date_transacted' 和 'value'.
,它们将失败
function restructureJson(obj) {
var output = {c:[]};
for (var i in obj) {
output.c.push({v:obj[i]});
}
return output;
}
此函数可在包含任意数量属性的任意大小的任意对象数组上重复使用。
// Simple example
var json1 = [{
"value": 1.37,
"date_transacted": "2015-01-01"
}];
// More complex
var json2 = [{
"value": 1.37,
"date_transacted": "2015-01-01",
"another_value": "test",
"more": "12356"
},
{
"value": 1.62
},
{
"value": 1.83,
"date_transacted": "2015-03-01",
"stuff": "124334654567"
}];
// Map the function to the arrays
a = json1.map(restructureJson);
b = json2.map(restructureJson);
我有这个json结构。
x=[{
"value": 1.37,
"date_transacted": "2015-01-01"
}]
根据这个 json 结构,我想生成以下 json 结构;
y1=[{
c: [{
v: "2015-01-01"
},
{
v: "1.37"
}]
}]
我已经编写了执行此操作的代码。看起来像这样;
var y1 = [{ c:[ {"v":x[0].value}, {"v":x[0].date_transacted} ] }];
当 x
有几个 json key/value 对时,我的问题就来了。看起来像这样的东西;
x=[{
"value": 1.37,
"date_transacted": "2015-01-01"
},
{
"value": 1.62,
"date_transacted": "2015-02-01"
},
{
"value": 1.83,
"date_transacted": "2015-03-01"
}]
通过对象数组迭代我的代码以生成所需的 json 结构的有效方法是什么?
y=[{
c: [{
v: "2015-01-01"
},
{
v: "1.37"
}]
},
{
c: [{
v: "2015-01-02"
},
{
v: "1.62"
}]
},
{
c: [{
v: "2015-01-03"
},
{
v: "1.83"
}]
}]
var y1=[];
for(var i=0;i<x.length;i++){
y1[i]= [{ c:[ {"v":x[i].value}, {"v":x[i].date_transacted} ] }];
}
作为单个语句:
y = x.map(function(e)
{
return {
c:
[
{
v: e.value
},
{
v: e.date_transacted
}
]
};
});
只有当 x 中的对象具有确切的 2 个属性时,其他两个答案才有效。 一种不考虑属性数量的方法:
y = [];
for(var i = 0, i < x.length; i++){
var obj = {c:[]};
for(var prop in x[i]){
obj.c.push({v:x[i][prop]})
}
y.push(obj);
}
编辑:使用地图
y = x.map(function(e)
{
var obj = {c: []};
for(var prop in e){
obj.c.push({v:e[prop]})
}
return obj;
});
此处的其他答案(@user2415266 除外)不是动态的、硬编码的以接受确切的输入,并且不是特别可重用。如果您拥有超过 2 个属性,或者在@Siguza 的情况下,如果您的属性未被称为 'date_transacted' 和 'value'.
,它们将失败function restructureJson(obj) {
var output = {c:[]};
for (var i in obj) {
output.c.push({v:obj[i]});
}
return output;
}
此函数可在包含任意数量属性的任意大小的任意对象数组上重复使用。
// Simple example
var json1 = [{
"value": 1.37,
"date_transacted": "2015-01-01"
}];
// More complex
var json2 = [{
"value": 1.37,
"date_transacted": "2015-01-01",
"another_value": "test",
"more": "12356"
},
{
"value": 1.62
},
{
"value": 1.83,
"date_transacted": "2015-03-01",
"stuff": "124334654567"
}];
// Map the function to the arrays
a = json1.map(restructureJson);
b = json2.map(restructureJson);