2010-11-25 10 views
4

Ich habe für eine Weile suchen und einen Weg will ein JSON-Objekt wie folgt zu sortieren:Wie sortiere ich ein JSON-Objekt in Java?

{"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", 
    } 
]} 

und alphabetisch sortiert wird durch den Wert „COMMERCIALNAME_E“ zu erhalten:

{"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" 
    } 
]} 

I kann keinen Code finden, der dies tut. Kann mir jemand Hilfe geben?

Antwort

5

Analysieren Sie diese JSON-Objekte, und verwenden Sie den Komparator, um sie mit Ihrem bevorzugten Feld zu sortieren.

Beispiel:

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); 

Wenn Sie JSON wollen von Objekt erstellen.

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

Danke, aber ich diese Aufgabe bei dynamisch (wenn sie Web-Service genannt) Ist es possibile json Objekt Zeichenfolge mit toString() -Methode oder jedem onther Verfahren erfordern bitte helfen Sie mir –

+0

zu konvertieren @venkatesh Wenn Sie JSON von Object erstellen wollen, dann ist das sehr gut möglich mit 'new com.google.gson.Gson(). toJson (obj);' –

+0

Danke, JSONObject obj =/** json Objektdaten **/dann Zeichenfolge str = obj.toString(); ist es richtig ? Bitte erläutern Sie deutlich –

2

Sie können einen List<JSONObject> Wrapper um den JSON-Array schreiben, dann Collections.sort mit einem Comparator<JSONObject> benutzerdefinierten verwenden.

+1

wie man das macht? – RicardoE

3

Boon bietet JSON-Sortierung, Suche, Filterung und mehr.

Check out:

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<Employee>) 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 ist auch derzeit der schnellste JSON-Parser auf der JVM (circa März 2014).

3

Ich habe JSON einfache API verwendet, um dies zu sortieren. Hier ist mein Code:

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<JSONObject> 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<JSONObject> { 

@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); 
} 

} 
+0

Das benötigt mehr Stimmen. –