var data = {};
$('.table-row').each(function(i, el) {
var key = $(el).find('.key').val();
var value = $(el).find('.value').val();
data[key] = value ;
}
var json = JSON.stringify(data);
// output unordered JSON string, since associative object does not preserve order
console.info(json);
Как создать упорядоченную строку JSON, в которой ключи упорядочены в порядке вставки?
Например, когда table-row содержит элементы в следующем порядке - a, x, c, мне нужно получить строку JSON, такую как эта {a: 1, x:2, c: 'value001'}
Зачем тебе это нужно?
@imtheman, как этот вопрос связан с исходным вопросом? java vs javascript, другой язык, разные проблемы
@FelixKling Я отправляю произвольные данные на сервер (ассоциативный массив), и мне нужно сохранить порядок массива. Мне кажется, самый простой способ сделать это - сериализовать в JSON.
Даже если вы можете правильно упорядочить свойства в JSON, нет гарантии, что язык на стороне сервера сохранит порядок (вы можете переключиться на другой язык в будущем). Если вам абсолютно необходим порядок, используйте массив.
Это действительно похоже на проблему XY
Мы говорим здесь о порядке обхода DOM?
@ibowankenobi в приведенном выше примере порядок ключей в строке JSON должен совпадать с порядком обхода DOM. Но вместо порядка обхода DOM это может быть итерация по упорядоченному массиву
@FelixKling в любом случае, я согласен с вами, что JSON не предназначен для упорядоченной итерации, независимо от того, какой язык программирования используется. Так что, возможно, имеет смысл закрыть вопрос
Один вопрос, почему вы не хотели использовать массив массивов? [[k, v], [k, v] ...] и т. д.?
Похоже, вы себя обманули. Как показывает обсуждение здесь, ваша структура данных не является ассоциативным массивом, состоящим из пар ключ-значение, а вместо этого представляет собой упорядоченный список элементов, которые случайно имеют свойства, называемые key и value. По крайней мере, некоторая часть ассоциации значений, похоже, осуществляется с помощью индекса (позиция), а не только с помощью key. Возможно, вам стоит изменить то, как вы смотрите / воспринимаете свои данные
Вместо этого вы можете хранить массив ключей и массив значений, например 'table-row_keys': table-row.keys и аналогичные значения. Затем при разборе json вам просто нужно снова объединить их. Немного дополнительной работы, но поддержит ваш порядок.
@Thomas - это типичная хеш-карта, где записи упорядочены по порядку вставки. Очень распространенная структура данных на нескольких языках. В Java это называется LinkedHashMap.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если table-row является объектом, порядок элементов в table-row не гарантируется. Гарантирует ли JavaScript порядок собственности объекта?
Возможно, вам лучше начать с массива или КАРТА для хранения ваших заказанных ключей, что упростит преобразование в строку JSON того же порядка.
4395647 репост устаревшей, теперь неточной информации - получил одобрение. Кто-нибудь вообще читал предупреждения, выделенные жирным шрифтом, на связанный вопрос?
Возможный дубликат Сохраняйте порядок ключей JSON во время преобразования JSON в CSV