Получить массив KEYS для каждого элемента под jsonarray

Я хочу динамически анализировать массив Json. И хотите получить массив KEYS для каждого элемента под jsonarray. Я получаю это через итератор. Но не получая sequance в соответствии с выходом json formate.

Мой JSON Formate:

{ "result": "Success", "AlertDetails": [ { "ShipmentNumber": "SHP34", "Customer": "BEST", "DateCreated": "2012-08-29T04:59:18Z" "CustomerName": "BEST" }, { "ShipmentNumber": "SHP22", "Customer": "BEST", "DateCreated": "2012-08-29T05:34:18Z" "CustomerName": "Jelly" } ] } 

Вот мой код:

  JSONArray array = jsonobject.getJSONArray("AlertDetails"); JSONObject keyarray = array.getJSONObject(0); Iterator temp = keyarray.keys(); while (temp.hasNext()) { String curentkey = (String) temp.next(); KEYS.add(curentkey); } Log.d("Parsing Json class", " ---- KEYS---- " + KEYS); 

Что я получаю в выходе logcate:

  ---- KEYS---- [DateCreated,CustomerName, Customer, ShipmentNumber] 

Что я хочу :

  ---- KEYS---- [ShipmentNumber, Customer, DateCreated,CustomerName] 

Solutions Collecting From Web of "Получить массив KEYS для каждого элемента под jsonarray"

Документация JSONObject (ссылка: http://developer.android.com/reference/org/json/JSONObject.html ) имеет следующее описание функции keys() :

Общедоступные ключи Iterator ()

С: API уровня 1

Возвращает итератор имен строк в этом объекте. Возвращаемый итератор поддерживает удаление, которое удалит соответствующее сопоставление с этого объекта. Если этот объект изменен после возвращения итератора, поведение итератора не определено. Порядок ключей не определен .

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

РЕДАКТИРОВАТЬ

Поскольку вы не знаете о заказе KEYS, который вы получаете из WS, после получения данных вы можете отображать детали на экране в упорядоченном формате. После создания arraylist KEYS вы можете сортировать его в алфавитном порядке, используя следующее:

 Collections.sort(KEYS); 

Это будет упорядочивать Strings в arraylist KEYS соответствии с его естественным порядком (который в алфавитном порядке ).

Я просто узнаю, когда я нажимаю ctlr + пробел , в котором четко написано, что поведение ключей не определено, заказы не поддерживаются ключами.

Введите описание изображения здесь

Арун Джордж сказал @ правильно, что вы должны использовать любой метод сортировки для достижения своей цели.

И для сортировки может оказаться, что эта ссылка вам поможет.

Используйте библиотеку GSON из Google. Он имеет множество настроек для чтения / создания / анализа json-массива и json-объектов. Я не тестировал его, чтобы найти решение, но я думаю, что это очень простой и полнофункциональный инструмент и может решить проблему.

Используйте разную библиотеку для динамического анализа json.

Ниже я написал фрагмент кода, основанный на Jackson JSON Processor, который, по моему мнению, является лучшей библиотекой JSON

 public void test() throws IOException { String str = "{\n" + " \"result\": \"Success\",\n" + " \"AlertDetails\": [\n" + " {\n" + " \"ShipmentNumber\": \"SHP34\",\n" + " \"Customer\": \"BEST\",\n" + " \"DateCreated\": \"2012-08-29T04:59:18Z\",\n" + " \"CustomerName\": \"BEST\"\n" + " }\n" + " ]\n" + "}"; JsonFactory factory = new JsonFactory(); JsonParser jsonParser = factory.createJsonParser(str); JsonToken jsonToken; SerializedString alertDetails = new SerializedString("AlertDetails"); while (!jsonParser.nextFieldName(alertDetails)) { /* move to AlertDetails field */ } jsonParser.nextToken(); // skip [ start array jsonParser.nextToken(); // skip { start object // until } end object while ((jsonToken = jsonParser.nextToken()) != JsonToken.END_OBJECT) { if (jsonToken == JsonToken.FIELD_NAME) { System.out.println(jsonParser.getCurrentName()); } } } 

Он просто печатает имена полей в том же порядке, что и в json:

 ShipmentNumber Customer DateCreated CustomerName 

РЕДАКТИРОВАТЬ

Естественно, вы можете использовать другие библиотеки, такие как gson и т. Д. Но помните, как написано на json.org , что:

Объектом является неупорядоченный набор пар имя / значение.

И порядок ключей зависит от реализации и может варьироваться в каждом запросе.

Существует также имя метода ();

Возвращает массив, содержащий имена строк в этом объекте.

Изменить: возвращает имена в неопределенном порядке. Предложения: проанализируйте его самостоятельно