Однако, когда я вижу отображение на своей странице, оно выдает:
Строка в формате JSON: [{"success":"NO", "userid":"User 1", "bid":24.23}]
Мне это нужно в порядке идентификатора пользователя, суммы, затем успеха. Уже пробовал изменить порядок в коде, но безрезультатно. Я тоже пробовал .append.... нужна помощь, спасибо!!
Переведено автоматически
Ответ 1
Вы не можете и не должны полагаться на порядок элементов внутри объекта JSON.
Объект представляет собой неупорядоченный набор пар имя / значение
Как следствие, библиотеки JSON могут свободно изменять порядок элементов по своему усмотрению. Это не ошибка.
Ответ 2
Я согласен с другими ответами. Вы не можете полагаться на порядок элементов JSON.
Однако, если нам нужно иметь упорядоченный JSON, одним из решений может быть подготовка объекта LinkedHashMap с элементами и преобразование его в JSONObject.
// string representation of json objects are different assertFalse(unexpectedJsonString.equals(json.toString())) // json objects are equal JSONAssert.assertEquals(JSONSerializer.toJSON(unexpectedJsonString), json) }
Usage of this JsonObject doesn't even bother using Map<>
CHEERS!!!
Ответ 4
Real answer can be found in specification, json is unordered. However as a human reader I ordered my elements in order of importance. Not only is it a more logic way, it happened to be easier to read. Maybe the author of the specification never had to read JSON, I do.. So, Here comes a fix:
/** * I got really tired of JSON rearranging added properties. * Specification states: * "An object is an unordered set of name/value pairs" * StackOverflow states: * As a consequence, JSON libraries are free to rearrange the order of the elements as they see fit. * I state: * My implementation will freely arrange added properties, IN SEQUENCE ORDER! * Why did I do it? Cause of readability of created JSON document! */ privatestaticclassOrderedJSONObjectFactory { privatestaticLoggerlog= Logger.getLogger(OrderedJSONObjectFactory.class.getName()); privatestaticbooleansetupDone=false; privatestaticFieldJSONObjectMapField=null;