当前位置: 首页 > 面试题库 >

从LinkedHashMap构建有序的JSON字符串

云丰
2023-03-14
问题内容

我需要按插入顺序设置键/值对,因此我选择使用LinkedHashMapover
HashMap。但是我需要将转换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());
        }
    }

输出为:

{"3":"third","2":"second","1":"first"} .

但我想要按键插入的顺序来进行操作,如下所示:

{"1":"first","2":"second","3":"third"}

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


问题答案:

格森,
如果你的朋友。这会将有序地图打印到有序JSON字符串中。

如果要保留插入顺序,请使用LinkedHashMap

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

    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"}
        }
    }

如果您希望将项目始终插入正确的位置,请改用a TreeMap

    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"}
        }
    }

依赖选项

马文

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

摇篮

compile 'com.google.code.gson:gson:2.8.5'

或者,您可以访问Maven
Central
以获得更多下载选项。



 类似资料:
  • 我有两个字符串 node1/node2/node3/node4“和”node1/node2/node5/node6“。...我怎样才能从这个字符串中构建一个摇摆的?这是我构建一个字符串的代码....

  • 问题内容: 从java中的json字符串创建哈希图? 我有喜欢的json字符串,想要转换为标准的Hashmap。 我该怎么做? 问题答案: 解析JSONObject并创建HashMap 测试输出:

  • 如何使用Jackson从字符串创建ObjectNode? 我试过: 但是得到 线程maincom.fasterxml.jackson.databind.JsonMappingException中的异常:属性type的冲突setter定义:jdk.nashorn.internal.ir.Symbol#setType(1个参数)vsjdk.nashorn.internal.ir.Symbol#setT

  • 问题内容: 我需要将这些bash变量读入JSON字符串,而我对bash并不熟悉。任何帮助表示赞赏。 问题答案: 如果您不提前知道变量的内容是否正确转义以包含在JSON中,则最好使用类似生成JSON 的程序。否则,您将因麻烦而最终使用无效的JSON。

  • 问题内容: 我正在使用Jongo与Mongo一起工作,当我执行查询时会收到结果。 问题是,如果json是content ,它将不是from的唯一方法。 我如何获得原件? 我没有要映射的地图,也不是创建类的解决方案,这就是为什么我使用 问题答案: 如果您可以访问某些JSON库,那似乎就是这样。 如果使用org.json库,请使用: 如果是Gson,请使用@hellboy提到的方法:

  • 问题内容: 我有从外部应用程序获取数据的Java应用程序。传入的JSON以字符串形式。我想解析该Strings并创建BSON对象。 不幸的是,我在Java的BSON实现中找不到用于此的API。 我是否像GSON这样使用了外部解析器? 问题答案: 最简单的方法似乎是使用JSON库将JSON字符串解析为,然后使用方法将这些值放入。