首页 > 解决方案 > 按 ID 对 JSON 数组进行排序

问题描述

我编写的代码采用包含 JSON 数据的字符串。我正在按 ID 对 JSON 对象数组进行排序。当我使用我的方法时,我得到了这个异常:“org.json.JSONException:JSONArray 文本必须以 '[' at 1 [character 2 line 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();

}

标签: javajson

解决方案


您描述的代码仅适用于看起来像这样的 json:

[
  { "useCaseId" : "4", ... },
  { "useCaseId" : "1", ... },
  { "useCaseId" : "a", ... },  
  ...
]

如您所见,字符串以[字符开头,就像要求的异常一样。

由于“大多数” json 开头{我猜你的 json 结构是不同的,然后你需要相应地调整你的代码。例如,如果您的 json 数组嵌入到像“大多数” json 这样的对象中:

{
  "useCases" : [
                 { "useCaseId" : "4", ... },
                 { "useCaseId" : "1", ... },
                 { "useCaseId" : "a", ... },  
                 ...
               ]
}

那么您必须创建 aJSONObject obj = new JSONObject(jsonArrStr)然后JSONArray通过调用(JSONArray)obj.get("useCases").


推荐阅读