按ID对JSON数组排序

时间:2018-10-15 07:12:04

标签: java json

我编写了代码,该代码采用包含JSON数据的字符串。我正在按ID对JSON对象数组进行排序。当我使用我的方法时,出现以下异常:“ org.json.JSONException:JSONArray文本必须以'['开头1 [字符2行1]“。

我在这里想念什么以及如何解决?

private static void ResortJsonByUseCaseID( String jsonArrStr )
{
    JSONArray jsonArr = new JSONArray(jsonArrStr);
    JSONArray sortedJsonArray = new JSONArray();

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

    java.util.Collections.sort( jsonValues, new java.util.Comparator<JSONObject>() {
        private static final String KEY_NAME = "useCaseId";

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

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

                int tal = 9;
            }

            return valA.compareTo(valB);

        }
    });

    for (int i = 0; i < jsonArr.length(); i++) {
        sortedJsonArray.put(jsonValues.get(i));
    }

    jsonArrStr = sortedJsonArray.toString();

}

1 个答案:

答案 0 :(得分:1)

您描述的代码仅适用于如下所示的json:

$sql = "select id as userid, name, status from users as t1, id as msgid, data, msg, xdir from story as t2 where...

如您所见,该字符串以[ { "useCaseId" : "4", ... }, { "useCaseId" : "1", ... }, { "useCaseId" : "a", ... }, ... ] 字符开头,就像要求的例外一样。

由于“大多数” json以[开头,所以我猜测您的json结构不同,因此您将需要相应地调整代码。例如,如果您的json数组嵌入在像“大多数” jsons这样的对象中,则为:

{

然后,您必须创建一个{ "useCases" : [ { "useCaseId" : "4", ... }, { "useCaseId" : "1", ... }, { "useCaseId" : "a", ... }, ... ] } ,然后通过调用JSONObject obj = new JSONObject(jsonArrStr)来获得JSONArray