Building ordered JSON String from LinkedHashMap(从 LinkedHashMap 构建有序 JSON 字符串)
问题描述
我需要按插入顺序排列键/值对,因此我选择使用 LinkedHashMap 而不是 HashMap.但我需要将 LinkedHashMap 转换为 JSON 字符串,其中 LinkedHashMap 中的顺序保留在字符串中.
I had a need for having Key/Value pairs in the order of my insertion, so I opted to use LinkedHashMap over HashMap. But I need to convert the LinkedHashMap into a JSON String where the order in the LinkedHashMap is maintained in the string.
但目前我正在通过以下方式实现它:
But currently I'm achieving it by:
- 首先将 LinkedHashMap 转换为 JSON.
 然后将 JSON 转换成字符串.
- First converting the LinkedHashMap into JSON.
 Then converting the JSON into a string.
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"} . 
但我希望它按插入键的顺序,如下所示:
But I want it in the order of insertion of the keys, like this:
{"1":"first","2":"second","3":"third"}
一旦我将 LinkedHashMap 转换为 JSON,它就会失去它的顺序(很明显 JSON 没有顺序的概念),因此字符串也是无序的.现在,如何生成与 LinkedHashMap 顺序相同的 JSON 字符串?
Once I convert the LinkedHashMap into a JSON it loses it order (it's obvious that JSON doesn't have the notion of order) and hence the string too is out of order. Now, how do I generate a JSON string whose order is same as the LinkedHashMap?
推荐答案
Gson 如果你的朋友.这会将有序的地图打印成有序的 JSON 字符串.
Gson if your friend. This will print the ordered map into an ordered JSON string.
如果要保留插入顺序,请使用 LinkedHashMap.
If you want to preserve insertion order, use a LinkedHashMap.
我使用的是最新版本的Gson(2.8.5),您可以通过本文底部的以下选项进行下载.
I used the latest version of Gson (2.8.5), you can can download it via the following options at the bottom of this post.
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"}
    }
}
如果您希望项目始终插入正确的位置,请改用 TreeMap.
If you want the items to always be inserted at the right place, use a TreeMap instead.
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"}
    }
}
依赖选项
Maven
<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 中心 获取更多下载选项.
Or you can visit Maven Central for more download options.
这篇关于从 LinkedHashMap 构建有序 JSON 字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从 LinkedHashMap 构建有序 JSON 字符串
				
        
 
            
        - Jersey REST 客户端:发布多部分数据 2022-01-01
 - C++ 和 Java 进程之间的共享内存 2022-01-01
 - 如何使用WebFilter实现授权头检查 2022-01-01
 - value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
 - Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
 - 将log4j 1.2配置转换为log4j 2配置 2022-01-01
 - 从 finally 块返回时 Java 的奇怪行为 2022-01-01
 - Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
 - Eclipse 插件更新错误日志在哪里? 2022-01-01
 - Java包名称中单词分隔符的约定是什么? 2022-01-01
 
						
						
						
						
						