0
Я пытаюсь сделать JSON документ так:Получение ключ в последовательности/порядке JSONObject JAVA
{
"query": {
"bool":{
"must":{
"match": {
"action": "HI"
},
"filter":{
"range":{
"epoch": {
"gte" : "1454964688008"
}
}
}
}
}
}
}
Условием является то, что матч должен быть всегда перед фильтром JSONObject.
SO, видя из this thread, я осуществил что-то вроде этого:
public static String getQuery(Alert reqAlert) {
LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Serializable>>>>> main = new LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Serializable>>>>>();
LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Serializable>>>> query = new LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Serializable>>>>();
LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Serializable>>> bool = new LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Serializable>>>();
LinkedHashMap<String, LinkedHashMap<String, Serializable>> must = new LinkedHashMap<String, LinkedHashMap<String, Serializable>>();
LinkedHashMap<String, Serializable> match = new LinkedHashMap<String, Serializable>();
LinkedHashMap<String, Serializable> filter = new LinkedHashMap<String, Serializable>();
LinkedHashMap<String, LinkedHashMap<String, String>> range = new LinkedHashMap<String, LinkedHashMap<String, String>>();
LinkedHashMap<String, String> epoch = new LinkedHashMap<String, String>();
epoch.put("gte", "1454964688008");
range.put("epoch", epoch);
filter.put("range", range);
match.put("action", reqAlert.getQueryString());
must.put("match", match);
must.put("filter", filter);
bool.put("must", must);
query.put("bool", bool);
main.put("query", query);
JSONObject mainObject = new JSONObject(main);
return mainObject.toString();
}
Но всегда печати
{"query":{"bool":{"must":{"filter":{"range":{"epoch":{"gte":"1454964688008"}}}},"match":{"action":"HI"}}}}
Что я должен делать?
Конструктор 'JSONObject', который вы использовали' JSONObject (Map , ?> map) ', изменит ваши карты на' HashMap', поэтому порядок не будет хранителем. – Titus
Здесь вы можете найти ответы: http://stackoverflow.com/questions/4515676/keep-the-order-of-the-json-keys-during-json-conversion-to-csv. Но как [верхний ответ] (http://stackoverflow.com/a/4515863/1970544) sugests, вы не должны полагаться на порядок полей. –
Извините, я не видел, что вы связали тот же вопрос. Самый простой способ заставить его работать описан в [втором ответе] (http://stackoverflow.com/a/7981662/1970544): вы должны изменить источник 'JSONObject.java'. –