您的位置:首页 > 移动开发 > Objective-C

对JSONObject中的数据进行排序

2015-09-20 17:46 453 查看
示例json字符串的格式如下:
{
"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中的数据。具体步骤:

先创建一个ArrayList,用于保存Entity

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的排序完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JSONObject排序