基于密钥的javajson数组排序

基于密钥的javajson数组排序,java,Java,我有一个JSON数组,希望根据Java中的键(字母数字)对其进行排序 排序后如何显示为: [{"abc":"56"},{"cpr":"15"},{"exe":"12"},{"pdf":"23"},{"zqr":"9"}] 这有点难看,但我想不出如何更干净地处理任意的关键问题。它确实有效:

我有一个JSON数组,希望根据Java中的键(字母数字)对其进行排序

排序后如何显示为:

[{"abc":"56"},{"cpr":"15"},{"exe":"12"},{"pdf":"23"},{"zqr":"9"}]

这有点难看,但我想不出如何更干净地处理任意的关键问题。它确实有效:

    List<Map<String, String>> list = (List<Map<String, String>>)JsonEncodeDecode.decode("[{\"exe\":\"12\"},{\"pdf\":\"23\"},{\"abc\":\"56\"},{\"zqr\":\"9\"},{\"cpr\":\"15\"}]\n");
    list.sort(Comparator.comparing(a -> (String)a.keySet().toArray()[0]));
    System.out.println(JsonEncodeDecode.encode(list));

我希望您有其他方法来生成初始列表,而不是将其硬编码到代码中。这只是为了表明排序是有效的。

使用以下内容设置POM.XML:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version><!-- or higher version -->
</dependency>

com.fasterxml.jackson.core
杰克逊数据绑定
2.9.8
Java代码如下:

public static void main(String[] args) throws Exception {
    
    String json = "[{\"exe\":\"12\"},{\"pdf\":\"23\"},{\"abc\":\"56\"},{\"zqr\":\"9\"},{\"cpr\":\"15\"}]";
    ObjectMapper mapper = new ObjectMapper();
    List<LinkedHashMap> parsedJson = mapper.readValue(json, List.class);
    
    Map<String, String> sortedMap = new TreeMap<>();
    
    for (LinkedHashMap<String, String> elementMap : parsedJson) {
        Entry<String, String> elementEntry = elementMap.entrySet().iterator().next();
        sortedMap.put(elementEntry.getKey(), elementEntry.getValue());
    }
            
    System.out.println(mapper.writeValueAsString(sortedMap));
}
publicstaticvoidmain(字符串[]args)引发异常{
字符串json=“[{\'exe\':\'12\',{\'pdf\':\'23\',{\'abc\':\'56\',{\'zqr\':\'9\',{\'cpr\':'15\'”;
ObjectMapper mapper=新的ObjectMapper();
List parsedJson=mapper.readValue(json,List.class);
Map sortedMap=newtreemap();
for(LinkedHashMap元素映射:parsedJson){
Entry elementEntry=elementMap.entrySet().iterator().next();
sortedMap.put(elementEntry.getKey(),elementEntry.getValue());
}
System.out.println(mapper.writeValueAsString(sortedMap));
}

可能有更好的方法,但现在…

在建议的示例中,有一个公共密钥,这在我的示例中不存在
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version><!-- or higher version -->
</dependency>
public static void main(String[] args) throws Exception {
    
    String json = "[{\"exe\":\"12\"},{\"pdf\":\"23\"},{\"abc\":\"56\"},{\"zqr\":\"9\"},{\"cpr\":\"15\"}]";
    ObjectMapper mapper = new ObjectMapper();
    List<LinkedHashMap> parsedJson = mapper.readValue(json, List.class);
    
    Map<String, String> sortedMap = new TreeMap<>();
    
    for (LinkedHashMap<String, String> elementMap : parsedJson) {
        Entry<String, String> elementEntry = elementMap.entrySet().iterator().next();
        sortedMap.put(elementEntry.getKey(), elementEntry.getValue());
    }
            
    System.out.println(mapper.writeValueAsString(sortedMap));
}