我想知道是否有可能生成一個JSON對象與傑克遜的JsonSerializer其中的屬性按值排序(而不是按鍵)。例如:按照自定義順序序列化對象屬性與傑克遜
{
"property2": 320,
"property1": 287,
"property4": 280,
"property3": 123,
...
}
我試圖生成它創建自定義JsonSerializer這樣的:
public class MySerializer extends JsonSerializer<Map<String, Long>> {
@Override
public void serialize(Map<String, Long> t, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
List<Entry<String, Long>> list = new ArrayList<>(t.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Long>>() {
@Override
public int compare(Map.Entry<String, Long> o1, Map.Entry<String, Long> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
jg.writeStartObject();
for(Entry<String, Long> entry : list) {
jg.writeNumberField(entry.getKey(), entry.getValue());
}
jg.writeEndObject();
}
}
但JSON產生不受屬性值進行排序,傑克遜必須再次無序對象屬性。有什麼辦法可以做到這一點?
編輯:問題不與傑克遜,但與應用程序I用於檢索JSON(CocoaRestClient),這改變了在所生成的對象的屬性的順序。我的方法和@ m.aibin的方法都是正確的。 如果您有類似問題,請檢查問題不在於您用於檢索JSON的應用程序。
屬性的順序應該從來不管,除了*也許*易讀性的目的。 –