Как мне изменить JSON в JavaScript? - PullRequest
3 голосов
/ 07 декабря 2010
[
   {"task":"test","created":"/Date(1291676980607)/"},
   {"task":"One More Big Test","created":"/Date(1291677246057)/"},
   {"task":"New Task","created":"/Date(1291747764564)/"}
]

Я посмотрел здесь, и у кого-то возник такой же вопрос, но «проверенный» правильный ответ состоял в том, что в IE все будет иначе, если элемент будет удален, что было бы хорошо.Моя проблема в том, что эти элементы выше сохранены, но когда я иду и беру их, повторяю и возвращаю, элементы меняются местами, и created имеет индекс 0, а task - 1.Кроме того, мне нужно вернуть это как JSON.

Вот мой базовый JS (значение == an 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"

Ответы [ 4 ]

4 голосов
/ 07 декабря 2010

Порядок свойств объекта не определен. Невозможно заставить их в указанном порядке. Если они вам нужны в определенном порядке, вы можете надежно построить эту структуру, используя массивы:

var values = [
   [["task", "test"],              ["created", "/Date(1291676980607)/"]],
   [["task", "One More Big Test"], ["created", "/Date(1291677246057)/"]],
   [["task", "New Task"],          ["created", "/Date(1291747764564)/"]]
];

Затем вы можете перебрать свою структуру следующим образом:

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)
    }
}
0 голосов
/ 12 июля 2017
var items = ["bag", "book", "pen", "car"];
items.reverse();

Это приведет к следующему выводу:

car , pen, book, bag

Даже если у вас есть массив JSON, он обратится.

0 голосов
/ 07 декабря 2010

Чтобы обеспечить определенный порядок вывода, просто замените json[value] в цикле for на массив свойств объекта в том порядке, в котором вы хотите их отобразить, в вашем случае ["task", "created"].

0 голосов
/ 07 декабря 2010

Проблема в том, что объекты JavaScript не хранят свои свойства в определенном порядке. С другой стороны, массивы (поэтому вы можете получить что-то непротиворечивое из json [0], json [1], json [2])

Если ваши объекты всегда будут иметь «задание» и «созданный», то вы можете получить их в любом порядке.

json[value]["task"]

и

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)
}

Затем отправьте свой JSON на сервер. Позже, когда вы получите данные обратно с сервера:

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;
...