为了账号安全,请及时绑定邮箱和手机立即绑定

按 ID 对 JSON 数组进行排序

按 ID 对 JSON 数组进行排序

慕妹3146593 2021-11-17 17:34:01
我编写的代码采用包含 JSON 数据的字符串。我正在按 ID 对我的 JSON 对象数组进行排序。当我使用我的方法时,我得到这个异常:“org.json.JSONException: A JSONArray text must start with '[' 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();}
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

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


[

  { "useCaseId" : "4", ... },

  { "useCaseId" : "1", ... },

  { "useCaseId" : "a", ... },  

  ...

]

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


由于“大多数”jsons 以{我猜测您的 json 结构是不同的,然后您将需要相应地调整您的代码。例如,如果您的 json 数组嵌入在“大多数”jsons 之类的对象中:


{

  "useCases" : [

                 { "useCaseId" : "4", ... },

                 { "useCaseId" : "1", ... },

                 { "useCaseId" : "a", ... },  

                 ...

               ]

}

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


查看完整回答
反对 回复 2021-11-17
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信