如何在JavaScript中反转JSON?
我看了这里,有人问了同样的问题,但“勾选”的正确答案是,如果该项目被删除,IE上的内容会有所不同,这很好。我的问题是,上面的那些项目是存储的,但当我去抓取它们,迭代并返回时,这些项目被反转,创建的如何在JavaScript中反转JSON?,javascript,arrays,json,loops,Javascript,Arrays,Json,Loops,我看了这里,有人问了同样的问题,但“勾选”的正确答案是,如果该项目被删除,IE上的内容会有所不同,这很好。我的问题是,上面的那些项目是存储的,但当我去抓取它们,迭代并返回时,这些项目被反转,创建的位于0索引,而任务位于1。另外,我需要将其作为JSON返回 下面是我的基本JS(value==用户传入的int): 这将返回: outputJSON = {}; for(x in json[value]){ outputJSON[x] = _objectRevival(json[value][x
位于0
索引,而任务位于1
。另外,我需要将其作为JSON返回
下面是我的基本JS(value==用户传入的int):
这将返回:
outputJSON = {};
for(x in json[value]){
outputJSON[x] = _objectRevival(json[value][x]);
}
return outputJSON;
对象属性的顺序未定义。不可能按指定顺序强制它们。如果您需要按特定顺序使用它们,则可以使用阵列可靠地构建此结构:
created: Mon Dec 06 2010 15:09:40 GMT-0800 (Pacific Standard Time)
task: "test"
然后您可以像这样迭代您的结构:
var values = [
[["task", "test"], ["created", "/Date(1291676980607)/"]],
[["task", "One More Big Test"], ["created", "/Date(1291677246057)/"]],
[["task", "New Task"], ["created", "/Date(1291747764564)/"]]
];
for(变量i=0;i
问题在于javascript对象没有按特定顺序存储其属性。另一个上的数组则可以(因此可以从json[0]、json[1]、json[2]中获得一致性)
如果你的对象总是有“任务”和“创建”,那么你可以按你想要的任何顺序获取它们
for (var i = 0; i < values.length; i++) {
for (var k = 0; k < values[i]; k++) {
// values[i][k][0] contains the label (index 0)
// values[i][k][1] contains the value (index 1)
}
}
及
更新:
这应该适用于您现有的代码。
在发送json对象之前:
json[value]["created"]
然后将json发送到服务器。稍后,当您从服务器返回数据时:
var before = [
{"task":"test","created":"/Date(1291676980607)/"},
{"task":"One More Big Test","created":"/Date(1291677246057)/"},
{"task":"New Task","created":"/Date(1291747764564)/"}
];
var order = [];
for (var name in before[0]) {
order.push(name); // puts "task", then "created" into order (for this example)
}
要对输出强制执行特定的顺序,只需将for
循环中的json[value]
替换为对象属性数组,按照您希望的顺序显示它们,在您的例子中是[“task”,“created”]
这将产生以下输出:
var items = ["bag", "book", "pen", "car"];
items.reverse();
即使您有JSON数组,它也会反转。如果您需要订单,您必须以不同的方式存储数据,例如,作为两个元素数组的数组或键/值对对象的数组。@Matti Virkkunen:我在这里解决了一点不同的问题以节省内存。OP没有确切说明他是否预先知道所有属性,或者无论数据的顺序如何,顺序是否应该跟随数据。是的,我希望,但他们不会。这只是一个演示用例。它们可以存储任何东西。好的,那么在你存储对象之前,你能把它们的名字放入一个数组中,以保持原来的顺序吗?然后当你取回它时,根据数组的顺序读出它们(迭代数组,得到json[value][array[i]])。\u objectrevolution()
使得如果存储的数据是对象,例如,如果用户放入Date()
对象,它会将其转换为.getTime(),然后放入/Date(12345…/
和\u objectrevolution()
使其返回到日期()
或其他对象,或者,如果它不匹配预定义的对象,则返回我返回的对象。
var before = [
{"task":"test","created":"/Date(1291676980607)/"},
{"task":"One More Big Test","created":"/Date(1291677246057)/"},
{"task":"New Task","created":"/Date(1291747764564)/"}
];
var order = [];
for (var name in before[0]) {
order.push(name); // puts "task", then "created" into order (for this example)
}
var outputJSON = {};
for (var x in order) {
if (order.hasOwnProperty(x)) {
outputJSON[order[x]] = _objectRevival(json[value][order[x]]); // I'm not sure what _objectRevival is...do you need it?
}
}
return outputJSON;
var items = ["bag", "book", "pen", "car"];
items.reverse();
car , pen, book, bag