GVKun编程网logo

android – 如何在java中对json对象的数组进行排序(java jsonobject排序)

26

对于想了解android–如何在java中对json对象的数组进行排序的读者,本文将提供新的信息,我们将详细介绍javajsonobject排序,并且为您提供关于Android如何对JSONObjec

对于想了解android – 如何在java中对json对象的数组进行排序的读者,本文将提供新的信息,我们将详细介绍java jsonobject排序,并且为您提供关于Android如何对JSONObjects的JSONArray进行排序、Java中对JSONArray中的对象的某个字段进行排序、在Android中,使用嵌套的json对象和带有多个json对象的嵌套json数组从json获取String、在Android中对字符串的数组列表进行排序的有价值信息。

本文目录一览:

android – 如何在java中对json对象的数组进行排序(java jsonobject排序)

android – 如何在java中对json对象的数组进行排序(java jsonobject排序)

我在jsonarray中有两个json对象

"errorCode": "1",
"data": [
    {
        "messageId": 590,
        "message": "WvZiT3RPm7feC6Hxsa/Ing==",
        "messageType": "CHAT",
        "sentOn": "01:51 PM, Apr 06, 2013",

        "mainParent": 589,
        "officeId": "19",
        "webParent": 590
    },
    {
        "messageId": 589,
        "message": "1A45rtoC3Cy88h73TEvDqQ==",
        "messageType": "CHAT",
        "sentOn": "01:50 PM, Apr 06, 2013",

        "parent": 0,
        "signImg": null,
        "mainParent": 589,
        "officeId": "19",
        "webParent": 1
    }
]

所以我想根据消息ID键按升序排序.我尝试使用比较器,对象类型为json对象,我在compareto方法中遇到错误.请建议我

解决方法:

我在这里发布答案,帮助那些面临这类问题的人.

public static JSONArray getSortedList(JSONArray array) throws JSONException {
            List<JSONObject> list = new ArrayList<JSONObject>();
            for (int i = 0; i < array.length(); i++) {
                    list.add(array.getJSONObject(i));
            }
            Collections.sort(list, new SortBasedOnMessageId());

            JSONArray resultArray = new JSONArray(list);

            return resultArray;
}

这部分代码将有助于对json数组进行排序

查看下面的SortBasedOnMessageId类.

public class SortBasedOnMessageId implements Comparator<JSONObject> {
    /*
    * (non-Javadoc)
    * 
    * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
    * lhs- 1st message in the form of json object. rhs- 2nd message in the form
    * of json object.
    */
    @Override
    public int compare(JSONObject lhs, JSONObject rhs) {
        try {
            return lhs.getInt("messageId") > rhs.getInt("messageId") ? 1 : (lhs
                .getInt("messageId") < rhs.getInt("messageId") ? -1 : 0);
        } catch (JSONException e) {
            e.printstacktrace();
        }
        return 0;

    }
}

Android如何对JSONObjects的JSONArray进行排序

Android如何对JSONObjects的JSONArray进行排序

我做了一个jsonobjects的jsonarray。现在,我需要根据jsonobjects中的值对JSONArray进行排序。以前,我对自定义对象的ArrayList进行如下排序:

比较器:

public class KreeftenComparatorLA implements Comparator<Kreeft> {    public int compare(Kreeft left, Kreeft right) {        return left.latijnseNaam.compareTo(right.latijnseNaam);    }}public class KreeftenComparatorNL implements Comparator<Kreeft> {    public int compare(Kreeft left, Kreeft right) {        return left.naam.compareTo(right.naam);    }}

然后对arraylist进行排序:

Collections.sort(db.lijst, new KreeftenComparatorLA());

要么:

Collections.sort(db.lijst, new KreeftenComparatorNL());

但是当我使用JSONArray尝试同样的事情时(JA =我的jsonarray)

Collections.sort(JA, new KreeftenComparatorNL());

Collections.sort给出一个错误:

类型Collections中的方法sort(List,Comparator)不适用于参数(JSONArray,ThisActicity.KreeftenComparatorNL)

有人知道如何对JSONArray进行排序吗?

答案1

小编典典

问题是JSONArray或多或少持有最终是字符串的JSONObjects(和其他JSONArrays)。将字符串完全反序列化为POJO,将其排序,然后再返回JSON,这相当繁重。

第二个问题是JSONArray可以包含:Boolean,JSONArray,JSONObject,Number,String或JSONObject.NULL对象;即它是混合类型,很难将元素转储到某种类型的List中并对其进行排序,然后通过列表将已排序的项目转回JSON数组。从JSONArray获取每个元素的通用类型的唯一确定方法是使用Object
get()方法。.当然,您所拥有的只是Object对象,并且在不重新访问Object的情况下将无法对其进行任何有意义的排序序列化问题。

假设您的JSONArray包含同构结构的值,则可以遍历JSONArray,在每个方法上调用一个类型化的get()方法,将它们转储为List类型,然后对其进行排序。如果您的JSONArray仅包含字符串或数字之类的“简单”类型,则这相对容易。这不是确切的代码,但类似:

List<String> jsonValues = new ArrayList<String>();for (int i = 0; i < myJsonArray.length(); i++)   jsonValues.add(myJsonArray.getString(i));Collections.sort(jsonValues);JSONArray sortedJsonArray = new JSONArray(jsonValues);

当然,如果您有嵌套的对象,则可能会有些棘手。如果您要在顶层进行排序的值可能还不错…

List<JSONObject> jsonValues = new ArrayList<JSONObject>();for (int i = 0; i < myJsonArray.length(); i++)   jsonValues.add(myJsonArray.getJSONObject(i));

然后使用类似的比较器进行排序:

class JSONComparator implements Comparator<JSONObject>{    public int compare(JSONObject a, JSONObject b)    {        //valA and valB could be any simple type, such as number, string, whatever        String valA = a.get("keyOfValueToSortBy");        String valB = b.get("keyOfValueToSortBy");        return valA.compareTo(valB);        //if your value is numeric:        //if(valA > valB)        //    return 1;        //if(valA < valB)        //    return -1;        //return 0;        }}

同样,这对JSONArray中数据的同质性​​做出了一些假设。如果可能,请根据情况进行调整。另外,您将需要添加异常处理等。祝您编程愉快!

*根据评论 *修改 固定

Java中对JSONArray中的对象的某个字段进行排序

Java中对JSONArray中的对象的某个字段进行排序

需求:

今天调用一个第三方接口,然后返回的是一个josn数组,需要根据里面的“报告日期”报告日期进行由大到小排序,最新的排在前面。

这种别人接口已经开发完成,不能改,所以只有我们自己来排序。

思路一():将josn数组转为list集合,然后获取到里面的每个对象,再获取“报告日期”,然后排序,然后对对应的对象排序。

思路二:

实现java的Collections.sort方法,自定义Comparator方法,然后排序。

这样效率比较高。

下面是测试和实现代码。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.deserializer.ParseProcess;

/**
 * Java中对JSONArray中的对象的某个字段进行排序
 * 
 * @author lijianbo
 * @version 1.0
 *
 */
public class Test1 implements ParseProcess {

    public static void main(String[] args) {
        String jsonArrStr = "[ { \"ID\": \"2016-05-25\", \"Name\": \"Fargo Chan\" },{ \"ID\": \"2016-05-23\", \"Name\": \"Aaron Luke\" },{ \"ID\": \"2016-05-26\", \"Name\": \"Dilip Singh\" }]";
        System.out.println("排序前:"+jsonArrStr);
        String jsonArraySort = jsonArraySort(jsonArrStr);
        System.out.println("排序后:"+jsonArraySort);
    }

    /**
     * 按照JSONArray中的对象的某个字段进行排序(采用fastJson)
     * 
     * @param jsonArrStr
     *            json数组字符串
     * 
     */
    public static String jsonArraySort(String jsonArrStr) {
        JSONArray jsonArr = JSON.parseArray(jsonArrStr);
        JSONArray sortedJsonArray = new JSONArray();
        List<JSONObject> jsonValues = new ArrayList<JSONObject>();
        for (int i = 0; i < jsonArr.size(); i++) {
            jsonValues.add(jsonArr.getJSONObject(i));
        }
        Collections.sort(jsonValues, new Comparator<JSONObject>() {
            // You can change "Name" with "ID" if you want to sort by ID
            private static final String KEY_NAME = "ID";

            @Override
            public int compare(JSONObject a, JSONObject b) {
                String valA = new String();
                String valB = new String();
                try {
                    // 这里是a、b需要处理的业务,需要根据你的规则进行修改。
                    String aStr = a.getString(KEY_NAME);
                    valA = aStr.replaceAll("-", "");
                    String bStr = b.getString(KEY_NAME);
                    valB = bStr.replaceAll("-", "");
                } catch (JSONException e) {
                    // do something
                }
                return -valA.compareTo(valB);
                // if you want to change the sort order, simply use the following:
                // return -valA.compareTo(valB);
            }
        });
        for (int i = 0; i < jsonArr.size(); i++) {
            sortedJsonArray.add(jsonValues.get(i));
        }
        return sortedJsonArray.toString();
    }

}

结果为:

排序前:[ { "ID": "2016-05-25", "Name": "Fargo Chan" },{ "ID": "2016-05-23", "Name": "Aaron Luke" },{ "ID": "2016-05-26", "Name": "Dilip Singh" }]
排序后:[{"Name":"Dilip Singh","ID":"2016-05-26"},{"Name":"Fargo Chan","ID":"2016-05-25"},{"Name":"Aaron Luke","ID":"2016-05-23"}]

转载:http://blog.51cto.com/jianboli/1983017

在Android中,使用嵌套的json对象和带有多个json对象的嵌套json数组从json获取String

在Android中,使用嵌套的json对象和带有多个json对象的嵌套json数组从json获取String

我需要以String的形式访问复杂Json中包含的所有单个参数.

例如String people = …;
String idPeople = …;等等

我试图使用JSONTokeners,因为我试图搜索类似的问题,而对于简单的json,我没有问题,但我不知道如何从这里正确获取参数:

{"id":1,"error":null,"result":
  {"nPeople":2,"people":[
            {"namePeople":"Inca","power":"1235","location":"asdfghjja","idPeople":189,"mainItems":"brownGem","verified":false,"description":"Lorem impsum bla bla","linkAvatar":"avatar_12.jpg","longitude":16.2434263,"latitude":89.355118},{"namePeople":"Maya","location":"hcjkjhljhl","idPeople":119,"mainItems":"greenstone","linkAvatar":"avatar_6.jpg","latitude":89.3551185}]
    }
}

NB数组中对象的数量并不总是2 …并且可能包含4个或更多人对象

解决方法

我没试过.
但我想它可能会奏效.
JSONObject obj = new JSONObject(jsonString);
    String id = obj.getString("id");
    String error = obj.getString("error");
    JSONObject result = obj.getJSONObject("result");
    int nPeople = result.getInt("nPeople");
    JSONArray people = result.getJSONArray("people");
    for(int i = 0 ; i < people.length() ; i++){
        JSONObject p = (JSONObject)people.get(i);
        String namePeople = p.getString("namePeople");
        ...
    }

在Android中对字符串的数组列表进行排序

在Android中对字符串的数组列表进行排序

我有一个字符串arraylist’names’。其中包含人员名称。我想按字母顺序对arraylist进行排序。请帮助我

答案1

小编典典

这将解决您的问题…

ArrayList arrayList = new ArrayList();//Add elements to ArraylistarrayList.add("1");arrayList.add("3");arrayList.add("5");arrayList.add("2");arrayList.add("4");Collections.sort(arrayList);//display elements of ArrayListSystem.out.println("ArrayList elements after sorting in ascending order : ");for(int i=0; i<arrayList.size(); i++)    System.out.println(arrayList.get(i));

要对ArrayList对象进行排序,请使用Collection.sort方法。这是一种静态方法。它将ArrayList对象的元素按升序排序。

万一下面的代码在注释中不起作用,请尝试以下代码。

创建一个自定义比较器类:

import java.util.Comparator;class IgnoreCaseComparator implements Comparator<String> {  public int compare(String strA, String strB) {    return strA.compareToIgnoreCase(strB);  }}

然后按您的排序:

IgnoreCaseComparator icc = new IgnoreCaseComparator();java.util.Collections.sort(arrayList,icc);

我们今天的关于android – 如何在java中对json对象的数组进行排序java jsonobject排序的分享就到这里,谢谢您的阅读,如果想了解更多关于Android如何对JSONObjects的JSONArray进行排序、Java中对JSONArray中的对象的某个字段进行排序、在Android中,使用嵌套的json对象和带有多个json对象的嵌套json数组从json获取String、在Android中对字符串的数组列表进行排序的相关信息,可以在本站进行搜索。

本文标签: