从 LinkedHashMap 构建有序的 JSON 字符串

新手上路,请多包涵

我需要按插入顺序使用键/值对,所以我选择使用 LinkedHashMap 而不是 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 没有顺序的概念),因此字符串也是无序的。现在,如何生成顺序与 LinkedHashMap 相同的 JSON 字符串?

原文由 Karthic Rao 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

Gson 如果你的朋友。这会将有序地图打印成有序的 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"}
    }
}

如果您希望项目始终插入正确的位置,请改用 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 以获取更多下载选项。

原文由 Mr. Polywhirl 发布,翻译遵循 CC BY-SA 4.0 许可协议

JSONObject 意味着使用 org.json 库。不要那样做;它是旧原型,有更好的选择,如 Jackson 和 GSON。使用 Jackson,您只需使用:

 String json = new ObjectMapper().writeValueAsString(myLinkedHashMap);

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

原文由 StaxMan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏