java - 在 Java 中将 HashMap 格式化为 JSON
问题描述
假设我有以下需要转换为 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 的键是字符串集怎么办?
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
如果您想在迭代时保留插入顺序,则需要。否则,您必须使用比较器对流进行排序。
推荐阅读
- r - 如何在 convpow 中修复“xy.coords(x, y, setLab = FALSE) 中的错误:'x' 和 'y' 长度不同”以实现窄均匀分布?
- python - 如何使用 Python 绘制模拟几何随机变量的直方图?
- file - Dropzone.js - 如何在提交按钮单击而其他事件照常运行时触发 sendmultiple 事件
- excel - 如果范围内的单元格包含特定文本,则 Excel 导出并在新工作表上编译
- java - 嵌套 if 语句没有字符串
- scala - Gatling:转换响应并将其写入 JSON 文件
- javascript - PrimeNG 的“onClose”日历事件在跳出字段时不会触发?
- c# - 如何使用 TensorFlow Keras API 训练 dropout 概率?
- reactjs - 如何在无需注销/登录的情况下更新我的页面
- angular - 路由 URL 包含一个片段 (#)