对JSONObject中的数据进行排序
2015-09-20 17:46
453 查看
示例json字符串的格式如下:
对于此JSONObject,开始我还并不知道如何解析,后来查了源代码才发现,JSONObject对象其实存在一个names()方法,通过此方法,可以获取到JSONObject中的key值,我们再通过key值即可获取JSONArray中的数据。具体步骤:
先创建一个ArrayList,用于保存Entity
{ "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的排序完成。
相关文章推荐
- objective-c 反射
- Object-C 空@selector
- ObjectAnimator详解(测试用,承接Android动画操作中的测试)
- 简要解析XMPP框架及iOS-Objective-C的使用
- 【IOS 开发学习总结-OC-8.2】★★ objective-c面向对象之——类和对象(下)
- NSCFArray insertObject:atIndex:]: mutating method sent to immutable obje的解决方法
- objective-c @protocol
- PyQT中多重继承,其中继承的父类有QObject或QObject的子孙类
- ORA-12545: Connect failed because target host or object does not exist
- JSON JsonArray和JsonObject学习资料
- Android 属性动画(二):ObjectAnimator与ValueAnimator
- objective-c category
- 自动释放池嵌套的简单图解
- Objective-C中的@property的retain写法的原理
- Entity FreamWork 无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型错误解决
- 在Win7 x64中使用GNUstep和MinGW编写Objective-C的代码
- 关于Objective-C的内存管理图解
- Object-C学习笔记
- 绑定数据 Repeater 与ObjectDataSource的用法
- 详解Objective-C的meta-class ,runtime创建类,添加实例变量