如何在java中对JSON对象进行排序?

我一直在寻找一段时间,想要一种方法来对JSON对象进行排序,如下所示:

{"results": [ { "layerId": 5, "layerName": "Pharmaceutical Entities", "attributes": { "OBJECTID": "35", "FACILITYTYPE": "Pharmacy", "FACILITYSUBTYPE": "24 Hr Pharmacy", "COMMERCIALNAME_E": "SADD MAARAB PHARMACY" }, "geometryType": "esriGeometryPoint", }, { "layerId": 5, "layerName": "Pharmaceutical Entities", "attributes": { "OBJECTID": "1", "FACILITYTYPE": "Pharmacy", "FACILITYSUBTYPE": "24 Hr Pharmacy", "COMMERCIALNAME_E": "GAYATHY HOSPITAL PHARMACY" }, "geometryType": "esriGeometryPoint", }, { "layerId": 5, "layerName": "Pharmaceutical Entities", "attributes": { "OBJECTID": "255", "FACILITYTYPE": "Pharmacy", "FACILITYSUBTYPE": "24 Hr Pharmacy", "COMMERCIALNAME_E": "AL DEWAN PHARMACY" }, "geometryType": "esriGeometryPoint", } ]} 

并按字母顺序按“COMMERCIALNAME_E”的值排序:

 {"results": [ { "layerId": 5, "layerName": "Pharmaceutical Entities", "attributes": { "OBJECTID": "255", "FACILITYTYPE": "Pharmacy", "FACILITYSUBTYPE": "24 Hr Pharmacy", "COMMERCIALNAME_E": "AL DEWAN PHARMACY" }, "geometryType": "esriGeometryPoint" }, { "layerId": 5, "layerName": "Pharmaceutical Entities", "attributes": { "OBJECTID": "1", "FACILITYTYPE": "Pharmacy", "FACILITYSUBTYPE": "24 Hr Pharmacy", "COMMERCIALNAME_E": "GAYATHY HOSPITAL PHARMACY" }, "geometryType": "esriGeometryPoint" }, { "layerId": 5, "layerName": "Pharmaceutical Entities", "attributes": { "OBJECTID": "35", "FACILITYTYPE": "Pharmacy", "FACILITYSUBTYPE": "24 Hr Pharmacy", "COMMERCIALNAME_E": "SADD MAARAB PHARMACY" }, "geometryType": "esriGeometryPoint" } ]} 

我找不到任何可以执行此操作的代码。 谁能给我一些帮助?

将这些JSON解析为对象集合,并使用比较器使用首选字段对其进行排序。

  • 使用GSON将其解析为对象集合

例:

 import com.google.gson.Gson; class Person { private int age; private String name; } String json = "{'age':22,'name':'Jigar'}"; Gson gson = new Gson(); TestJsonFromObject obj = gson.fromJson(json, Person.class); 

如果要从Object创建JSON。

 Person p = new Person(); p.setName("Jigar"); p.setAge(22); String jsonStr = new com.google.gson.Gson().toJson(obj); 

我使用JSON简单API对此进行排序。 这是我的代码:

 import java.io.FileReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; public class SortJSON { public static void main(String[] args) { JSONParser parser = new JSONParser(); try { JSONObject o = (JSONObject) parser.parse(new FileReader("test3.json")); JSONArray array = (JSONArray) o.get("results"); ArrayList list = new ArrayList<>(); for (int i = 0; i < array.size(); i++) { list.add((JSONObject) array.get(i)); } Collections.sort(list, new MyJSONComparator()); for (JSONObject obj : list) { System.out.println(((JSONObject) obj.get("attributes")).get("OBJECTID")); } } catch (Exception e) { e.printStackTrace(); } } } class MyJSONComparator implements Comparator { @Override public int compare(JSONObject o1, JSONObject o2) { String v1 = (String) ((JSONObject) o1.get("attributes")).get("COMMERCIALNAME_E"); String v3 = (String) ((JSONObject) o2.get("attributes")).get("COMMERCIALNAME_E"); return v1.compareTo(v3); } } 

Boon提供JSON排序,搜索,过滤等function。

查看:

http://www.dzone.com/links/r/sorting_for_java_instances_maps_java_collections.html(Boon Sorting)

  Object jsonObject = fromJson(json); List jsonDepartments = (List) jsonObject; List jsonEmployees = (List) atIndex(jsonDepartments, "employees"); sort(employees); //natural sort sort( employees, "lastName"); //sort by last name sort( departmentList ); //natural sort sort( employees, sortBy( "department.name" ), sortByDescending( "lastName" ), sortBy( "firstName" ) ); //you get the idea sort(employees, sortBy("contactInfo.phoneNumbers[0]")); //you can even sort by a path expression sort( employees, sortByDescending("contactInfo.phoneNumbers[0]") ); //backwards by a path expression max(employees); //gets the max (natural order employee) greatest(employees, 5); //gets the top five min(employees); //gets the lowest least(employees, 5); //gets the lowest five max(employees, "salary"); //gets the top salaried employee greatest(employees, "salary", 5); //gets the top five salaried employees min(employees, "salary"); //the least least(employees, "salary", 5); //the lowest five salaried employees 

Boon目前也是JVM上最快的JSON解析器(大约在2014年3月)。

您可以围绕JSON数组编写List包装器,然后将Collections.sort与自定义Comparator