从LinkedHashMap构建有序的JSON字符串

Kar*_*Rao 8 java string json hashmap linkedhashmap

我需要在我的插入顺序为键/值对,所以我选择了使用LinkedHashMapHashMap.但我需要将其LinkedHashMap转换为JSON字符串,其中字符串中的顺序LinkedHashMap保持不变.

但目前我通过以下方式实现:

  1. 首先将LinkedHashMap转换为JSON.
  2. 然后将JSON转换为字符串.

    import java.util.LinkedHashMap;
    import java.util.Map;
    
    import org.json.JSONObject;
    
    public class cdf {
        public static void main(String[] args) {
            Map<String,String > myLinkedHashMap =  new LinkedHashMap<String, String>();
            myLinkedHashMap.put("1","first");
            myLinkedHashMap.put("2","second");
            myLinkedHashMap.put("3","third");
    
            JSONObject json = new JSONObject(myLinkedHashMap);
            System.out.println(json.toString());
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

输出是:

{"3":"third","2":"second","1":"first"} . 
Run Code Online (Sandbox Code Playgroud)

但我希望它按插入键的顺序,如下所示:

{"1":"first","2":"second","3":"third"}
Run Code Online (Sandbox Code Playgroud)

一旦我将其LinkedHashMap转换为JSON,它就会失去它的顺序(显然JSON没有顺序的概念),因此字符串也是乱序的.现在,我如何生成一个顺序与LinkedHashMap?相同的JSON字符串?

Mr.*_*irl 13

如果你的朋友,格森.这会将有序映射打印为有序的JSON字符串.

我使用了最新版本的Gson(2.3.1),您可以通过本文底部的以下选项下载它.

import java.util.*;
import com.google.gson.Gson;

public class OrderedJson {
    public static void main(String[] args) {
        // Create a new ordered map.
        Map<String,String> myLinkedHashMap = new LinkedHashMap<String, String>();

        // Add items, in-order, to the map.
        myLinkedHashMap.put("1", "first");
        myLinkedHashMap.put("2", "second");
        myLinkedHashMap.put("3", "third");

        // Instantiate a new Gson instance.
        Gson gson = new Gson();

        // Convert the ordered map into an ordered string.
        String json = gson.toJson(myLinkedHashMap, LinkedHashMap.class);

        // Print ordered string.
        System.out.println(json); // {"1":"first","2":"second","3":"third"}
    }
}
Run Code Online (Sandbox Code Playgroud)

依赖选项

Maven的

import java.util.*;
import com.google.gson.Gson;

public class OrderedJson {
    public static void main(String[] args) {
        // Create a new ordered map.
        Map<String,String> myTreeHashMap = new TreeMap<String, String>();

        // Add items, in any order, to the map.
        myTreeHashMap.put("3", "third");
        myTreeHashMap.put("1", "first");
        myTreeHashMap.put("2", "second");

        // Instantiate a new Gson instance.
        Gson gson = new Gson();

        // Convert the ordered map into an ordered string.
        String json = gson.toJson(myTreeHashMap, TreeMap.class);

        // Print ordered string.
        System.out.println(json); // {"1":"first","2":"second","3":"third"}
    }
}
Run Code Online (Sandbox Code Playgroud)

摇篮

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

或者您可以访问Maven Central以获取更多下载选项.

  • 非常感谢:)它的工作原理:)谢谢Maven依赖,它帮助:) (3认同)
  • 很有用 。. . :) (2认同)

Sta*_*Man 5

JSONObject暗示使用org.json图书馆。不要那样做;它是旧原型,有更好的选择,如 Jackson 和 GSON。对于杰克逊,您只需使用:

String json = new ObjectMapper().writeValueAsString(myLinkedHashMap);
Run Code Online (Sandbox Code Playgroud)

并以您的 Map 使用的任何遍历顺序获取包含条目的 JSON 字符串。