Восстановить порядок, в котором данные помещаются в JSONObject

Я хочу иметь json, поскольку он вставлен в этот код, но он работает чем-то другим! Сначала я хочу CustomerID а затем Name но этот json дает Name сначала, а затем CustomerID . Я вставил json, так как хочу, но почему он дает отличный результат, пожалуйста, помогите мне ..

  JSONObject json = new JSONObject(); try { json.put("CustomerID", "069C21F1-EE87-4FB4-A129-478AEAA454FF"); json.put("Name", "Name_" + (int) Math.random() * 1000); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Это ожидаемое поведение JSONObject. По его определению, он говорит:

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

Однако, если вы хотите, чтобы это было заказано, выполните следующее:

 1. prepare a LinkedHashMap object with elements 2. convert it to JSONObject 

Пример:

 Map obj = new LinkedHashMap(); obj.put("a", "String1"); obj.put("b", new Integer(1)); obj.put("c", new Boolean(true)); obj.put("d", "String2"); JSONObject json = new JSONObject(obj); 

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

Скачать эту библиотеку:

https://github.com/douglascrockford/JSON-java

Сохранить все файлы в новом пакете в вашем проекте

Вместо использования org.json.JSONObject используйте your.package.JSONObject, который вы добавили из загруженной библиотеки.

Теперь откройте файл JSONObject.java и измените HashMap () на LinkedHashMap () в конструкторе

 public JSONObject(Map map) 

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

Вы можете использовать накопительные ()

См. Андроид-разработчики refference

Полезный ответ здесь

Гсон, если твой друг. Это напечатает упорядоченную карту в упорядоченную строку JSON.

Я использовал последнюю версию Gson (2.3.1), вы можете загрузить ее через следующие параметры внизу этой публикации.

 import java.util.LinkedHashMap; import java.util.Map; import com.google.gson.Gson; public class OrderedJson { public static void main(String[] args) { // Create a new ordered map. Map<String,String> myLinkedHashMap = new LinkedHashMap<String, String>(); // Add items, in-order, to the map. myLinkedHashMap.put("1", "first"); myLinkedHashMap.put("2", "second"); myLinkedHashMap.put("3", "third"); // Instantiate a new Gson instance. Gson gson = new Gson(); // Convert the ordered map into an ordered string. String json = gson.toJson(myLinkedHashMap, LinkedHashMap.class); // Print ordered string. System.out.println(json); // {"1":"first","2":"second","3":"third"} } } 

Варианты зависимостей Maven

 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3.1</version> </dependency> 

Gradle

 compile 'com.google.code.gson:gson:2.3.1' 

Или вы можете посетить Maven Central для получения дополнительных параметров загрузки.