{ "data": { "sort": { "fields": [ "open_px", "last_px", "high_px", "low_px" ], "603018.SS": [ 61.97, 60.47, 62.89, 60.28 ], "600990.SS": [ 62.8, 59.99, 62.88, 59.36 ], } } }具体步骤:
JSONObject object = new JSONObject(jsonStr); for (int i = 0; i < object.names().length(); i++) { JSONArray array = object.getJSONArray(object.names().getString(i)); Double open_px = array.getDouble(0); Double last_px = array.getDouble(1); Double high_px = array.getDouble(2); Double low_px = array.getDouble(3); Entity entity = new Entity(open_px,last_px,high_px,low_px); mList.add(entity); } SortComparator comparator = new SortComparator(); Collections.sort(mList, comparator);
对于此JSONObject,开始我还并不知道如何解析,后来查了源代码才发现,JSONObject对象其实存在一个names()方法,经过此方法,能够获取到JSONObject中的key值,咱们再经过key值便可获取JSONArray中的数据。具体步骤:html
先建立一个ArrayList,用于保存Entity
java
private ArrayList<Entity> mList = new ArrayList<Entity>();代码:
JSONObject object = new JSONObject(jsonStr); for (int i = 0; i < object.names().length(); i++) { JSONArray array = object.getJSONArray(object.names().getString(i)); Double open_px = array.getDouble(0); Double last_px = array.getDouble(1); Double high_px = array.getDouble(2); Double low_px = array.getDouble(3); Entity entity = new Entity(open_px,last_px,high_px,low_px); mList.add(entity); } SortComparator comparator = new SortComparator(); Collections.sort(mList, comparator);因为JSONObject的存储数据的方式与HashMap是同样的,也就是说,经过此方法,咱们取出来的数据它是不规则的,而若是想要获得一个按某个特定的规则来排序,则须要实现Comparator接口
class SortComparator implements Comparator{ @Override public int compare(Object lhs, Object rhs) { // TODO Auto-generated method stub Entity entity1 = (Entity) lhs; Entity entity2 = (Entity) rhs; return (int)(entity2.getLast_px()-entity1.getLast_px()); } }注:这里当中的Entity即为实体,用于存储咱们所获取的值,经过其中的某个值去定义本身的规则,而后排序。另外,需注意,当compare()返回为0时,没法进行排序。因此这也就涉及到一个问题,在实际的开发中,咱们会发现,服务器返回的数据有不少相近或相同的数据,那么他们就没法作到真正意义上的排序,由于咱们知道,当compare()返回0的时候,两者之间是没法排序的,那么就要对程序作相应的修改。
class SortComparator implements Comparator{ @Override public int compare(Object lhs, Object rhs) { // TODO Auto-generated method stub Entity entity1 = (Entity) lhs; Entity entity2 = (Entity) rhs; if(entity2.getLast_px()-entity1.getLast_px()>=0){ return 1; }else { return -1; } } }经过上面的方式修改,咱们发现,不让其返回为0的状况,便可完成全部的排序。这样也就达到了咱们的要求。至此,JSONObject的排序完成。