在Java中将HashMap格式化为JSON

在Java中将HashMap格式化为JSON,java,json,serialization,hashmap,Java,Json,Serialization,Hashmap,假设我有以下需要转换为JSON的HashMap: HashMap test1={k1,v1},{k2,v2},{k3,v3},{k4,v4} 我知道使用JSONObject创建JSON输出: jsonobjectjson=newjsonobject(test1) 但是,json将采用以下格式: {“k1”:“v1”、“k2”:“v2”、“k3”:“v3”、“k4”:“v4”} 我希望输出是这样的: [{"key":"k1","value":"v1"}, {"key":"k2","value":"

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

HashMap test1={k1,v1},{k2,v2},{k3,v3},{k4,v4}

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

jsonobjectjson=newjsonobject(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"}]
[{"key":"k1","value":["v1","v2","v3"]},
{"key":"k2","value":["v4","v5","v6"]},
{"key":"k3","value":["v7","v8","v9"]}]
有人对如何转换成格式化的JSON有意见吗?进一步的问题:如果HashMap的键是字符串集怎么办

HashMap test1={k1,{v1,v2,v3}},{k2,{v4,v5,v6},{k3,{v7,v8,v9}

我希望输出是这样的:

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

感谢您的帮助

假设您正在使用json简单库,您可以先将每个映射条目转换为一个新的
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); 

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

有一些自动对象->JSON转换器库。Jackson是最常用的,GSON也在那里:)两者都允许手动构造,您可以在其中创建
JsonNode
s,您可以将它们嵌套到另一个中,它们就像嵌套的
Map
@KarolDowbecki是的,意味着数组。更新了问题。