[英]java servlet sort json data by month name
我有一個具有鍵作為月名稱的單個對象的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>";
}
}
提前致謝!!
也許您可以通過以下解決方案更改對鍵進行迭代的部分:
如果您有一個以月為鍵的對象,則可能需要一個附加數組,將月份作為數字映射到該對象的鍵。
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]) + ...;
}
對我來說,如果您可以將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
屬性,因為這用於在選項標簽中分配值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.