【问题标题】:java servlet sort json data by month namejava servlet 按月份名称对 json 数据进行排序
【发布时间】:2017-11-15 12:19:25
【问题描述】:

我有一个 json 数组,其中包含单个对象,键为月份名称。当来自 Db 时,它看起来像 [{ "January": "January", "February": "February", "March": "March", "April": "April", "May": "May", "June": "June", "July": "July", "August": "August", "September": "September", "October": "October", "November": "November", "December": "December" }] 在前端它看起来像

<select data-field-id="317" class="form-control selectchange to_month" id="searchform_to_month" name="searchform_to_month"><option value="">Select To Month</option><option value="June">June</option><option value="October">October</option><option value="December">December</option><option value="May">May</option><option value="September">September</option><option value="March">March</option><option value="July">July</option><option value="January">January</option><option value="February">February</option><option value="April">April</option><option value="August">August</option><option value="November">November</option></select>

如何按月份名称对其进行排序,以便它出现在 Jan、Feb 等下拉列表中。

下面是使用的一段代码

JSONArray jsonArray = new JSONArray(rowfielddata.getString("option_values"));
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject json = jsonArray.getJSONObject(i);
                        Iterator<String> keys = json.keys();
                        while (keys.hasNext()) {
                            String key = keys.next();
                            f2 = f2 + "<option value='" + key + "'>" + json.get(key) + "</option>";
                        }

                    }

提前致谢!!

【问题讨论】:

  • 1/ 解析 2/ 排序 3/ 利润

标签: java json servlets


【解决方案1】:

也许您可以通过以下解决方案更改遍历键的部分:

如果您有一个以月份为键的对象,您可能需要一个附加数组,将月份作为数字映射到单个对象的键。

String []  monthsMapping = new String[12];
monthsMapping[0] = "January";
...
monthsMapping[11] = "December";

然后你生成遍历这个数组的选项:

for(int i=0; i<12; i++){
   //Generate the 12 options
   ... +  singleMonthJSONObject.getString(monthsMapping[i]) + ...;
}

【讨论】:

    【解决方案2】:

    如果您可以将 JSON 修改为以下结构,对我来说您的输入 json 看起来不正确:

        [{"monthName": "January","order":1},
          {"monthName": "February","order":2},
           {"monthName": "March","order":3},
            {"monthName": "April","order":4},
            {"monthName": "May","order":5},
            {"monthName": "June","order":6},
            {"monthName": "July","order":7},
            {"monthName": "August","order":8},
            {"monthName": "September","order":9},
            {"monthName": "October","order":10},
            {"monthName": "November","order":11},
            {"monthName": "December","order":12}]
    

    上面的 JSON 会给你数组 现在接下来您需要在 JSONArray 中读取数据后根据订单值对数据进行排序

    JSONArray jsonArray = jsonResult.getJSONArray("getalldata");
    
    JSONArray sortedJsonArray = new JSONArray();
        List<JSONObject> jsonValues = new ArrayList<JSONObject>();
        for (int i = 0; i < jsonArr.length(); i++) {
            jsonValues.add(jsonArr.getJSONObject(i));
        }
        Collections.sort( jsonValues, new Comparator<JSONObject>() {
    
            private static final String KEY_NAME = "order";
    
            @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
                }
                return valA.compareTo(valB);
               }
        });
    
        for (int i = 0; i < jsonValues.length(); i++) {
            JSONObject jsonObj= jsonValues.getJSONObject(i);
                                 f2 = f2 + "<option value='" + 
          jsonObj.optString("id")+ "'>" + jsonObj.optString("monthName") + "
          </option>";
        }
    

    我假设 json 中还有另一个名为 id 的属性,因为它用于在选项标签中分配值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 2018-06-19
      相关资源
      最近更新 更多