java - 在 Java 中将 HashMap 格式化为 JSON

标签 java json serialization hashmap

假设我有以下需要转换为 JSON 的 HashMap:

HashMap <String, String> test1 = {k1,v1},{k2,v2},{k3,v3},{k4,v4};

我知道使用 JSONObject 创建 JSON 输出:

JSONObject json = new JSONObject ( test1 );

但是,json 将采用以下格式: {"k1":"v1","k2":"v2","k3":"v3","k4":"v4"}

我希望输出是这样的:

[{"key":"k1","value":"v1"},
{"key":"k2","value":"v2"},
{"key":"k3","value":"v3"},
{"key":"k4","value":"v4"}]

有人对如何转换为格式化 JSON 有意见吗?进一步的问题:如果 HashMap 的键是 String 集合怎么办?

HashMap <String, Set<String>> test1 = {k1,{v1,v2,v3}},{k2,{v4,v5,v6}},{k3,{v7,v8,v9}};

我希望输出是这样的:

[{"key":"k1","value":["v1","v2","v3"]},
{"key":"k2","value":["v4","v5","v6"]},
{"key":"k3","value":["v7","v8","v9"]}]

感谢您的帮助

最佳答案

假设您正在使用 json-simple 库,您可以首先将每个映射条目转换为新的 JSONObject,然后将它们全部添加到 JSONArray 中:

Map<String, String> map = Map.of("k1", "v1", "k2", "v2", "k3", "v3", "k4", "v4");
JSONArray arr = map.entrySet().stream()
    .map(e -> Map.of("key", e.getKey(), "value", e.getValue()))
    .map(JSONObject::new)
    .collect(JSONArray::new, JSONArray::add, JSONArray::addAll);
System.out.println(arr); 

将打印:

[{"value":"v4","key":"k4"},{"value":"v3","key":"k3"},{"value":"v2","key":"k2"},{"value":"v1","key":"k1"}]

输出 JSONArray 中元素的顺序将取决于所使用的映射,如果您想在迭代时保留插入顺序,则需要 LinkedHashMap。否则,您必须使用比较器对流进行排序。

关于java - 在 Java 中将 HashMap 格式化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101915/

相关文章:

java - 如何在 Kotlin 中向 Gson 注册一个 InstanceCreator?

java - 如何告诉 Jackson 序列化为没有属性前缀的 json

c# - 序列化/反序列化和非默认构造函数

Java - 库路径错误

java - 为接口(interface)中的默认方法编写 Junit 测试用例

java - 为什么 C++/Java 内存模型不包含条件变量

java - 为什么此序列化逻辑失败并显示 'unmatched serializable field(s) declared' ?

java - 如何存储从以数组作为参数且返回类型为 double 的方法传递的值?

android - 如何在 Android Studio 中解析带有 url 的 Json

Javascript关联数组不将子数组作为值