javaandroid-如何基于键对JSONArray排序

javaandroid-如何基于键对JSONArray排序,java,android,arrays,json,sorting,Java,Android,Arrays,Json,Sorting,我将这个字符串(从一个Web服务)放入一个JSONArray,如下所示 [ { "lat": "-16.408545", "lon": "-71.539105", "type": "0", "distance": "0.54" }, { "lat": "-16.4244317845", "lon": "-71.52562186", "type": "1", "distance": "1.87" }, { "lat": "-16.4244317845"

我将这个字符串(从一个Web服务)放入一个JSONArray,如下所示

[
 {
  "lat": "-16.408545",
  "lon": "-71.539105",
  "type": "0",
  "distance": "0.54"
 },
 {
  "lat": "-16.4244317845",
  "lon": "-71.52562186",
  "type": "1",
  "distance": "1.87"
 },
 {
  "lat": "-16.4244317845",
  "lon": "-71.52562186",
  "type": "1",
  "distance": "0.22"
 }
]

我需要按距离键对其排序,以显示最近的第一个和最远的最后一个。我没有尝试任何代码,因为我真的没有任何想法。我没有使用GSON库,而是使用
org.json.JSONArray

将json对象解析为一个模型数组列表,并使用comparator对其进行排序

ArrayList<ClassObject> dataList = new ArrayList<String>();
JSONArray array = new JSONArray(json);     
for(Object obj : jsonArray){
   dataList.add(//your data model);
}
JSONArray jsonArray = new JSONArray(array);
String jsonArrayStr = jsonArray.toString();
ArrayList dataList=new ArrayList();
JSONArray数组=新的JSONArray(json);
for(对象对象对象:jsonArray){
添加(//您的数据模型);
}
有关数组列表的排序,请参阅此链接
首先分析列表中的数组

JSONArray sortedJsonArray = new JSONArray();
List<JSONObject> jsonList = new ArrayList<JSONObject>();
for (int i = 0; i < jsonArray.length(); i++) {
    jsonList.add(jsonArray.getJSONObject(i));
}
JSONArray sortedJsonArray=newjsonarray();
List jsonList=new ArrayList();
for(int i=0;i
然后使用collection.sort对新创建的列表进行排序

Collections.sort( jsonList, new Comparator<JSONObject>() {

    public int compare(JSONObject a, JSONObject b) {
        String valA = new String();
        String valB = new String();

        try {
            valA = (String) a.get("distance");
            valB = (String) b.get("distance");
        } 
        catch (JSONException e) {
            //do something
        }

        return valA.compareTo(valB);
    }
});
Collections.sort(jsonList,newcomparator(){
公共int比较(JSONObject a、JSONObject b){
String valA=新字符串();
String valB=新字符串();
试一试{
valA=(字符串)a.get(“距离”);
valB=(字符串)b.get(“距离”);
} 
捕获(JSONException e){
//做点什么
}
返回valA.compareTo(valB);
}
});
在数组中插入排序后的值

for (int i = 0; i < jsonArray.length(); i++) {
    sortedJsonArray.put(jsonList.get(i));
}
for(int i=0;i
试试这个。应该行得通

ArrayList<JSONObject> array = new ArrayList<JSONObject>();
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < jsonArray.length(); i++) {
   try {
       array.add(jsonArray.getJSONObject(i));
   } catch (JSONException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
   }
}   

Collections.sort(array, new Comparator<JSONObject>() {

@Override
public int compare(JSONObject lhs, JSONObject rhs) {
    // TODO Auto-generated method stub

    try {
        return (lhs.getDouble("distance").compareTo(rhs.getDouble("distance")));
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return 0;
    }
}
});

使用undercore.js库,您可以使用各种排序解决方案。请查看我的..同一问题Plz查看如何按名称排序listview非常感谢,它帮助我在顺序之间切换-->
valA.compareTo(valB)
vs
valB.compareTo(valA)