我有一张包含以下原型的地图
public static String getJson(Map<Device, List<Message>> data) {
String json = "{" + data.entrySet().stream()
.map(e -> "\"" + e.getKey().getId() + "\"" + ":\"" + String.valueOf(e.getValue()) + "\"")
.collect(Collectors.joining(", ")) + "}";
return json;
我想使用java 8将其转换为json。
我试过这个:
Map<String, List<String>> mapData = new HashMap<>();
mapData.put("Avy", Arrays.asList("Hello", "Hi"));
mapData.put("Sam", Arrays.asList("Good"));
但当我尝试在地图中转换超过1条记录时,它只会重新启动一条记录。
e.g。
db.a.aggregate([
{
$match: { "_id":{$in:["1","5","10"]} }
},
{
$lookup:
{
from: "b",
localField: "_id",
foreignField: "a",
as: "moneyid"
}
},
{
$unwind:
{"path":"$moneyid", "preserveNullAndEmptyArrays":true}
},
{
$match:{
"moneyid":{$eq:null}
}
}
])
返回
“{\”1001 \“:\”[消息{message ='您已安排每月检查。'}] \“}”
答案 0 :(得分:2)
使用GSON库的toJSON功能。 它很容易并且可以手动隐藏不必要的复杂性。 在这种情况下,您可能必须使用TypeToken。
Gson gson = new Gson();
Type classType = new TypeToken<Map<Device, List<Message>>>(){}.getType();
String dataMapJson= gson.toJson(dataMap, classType);
尚未测试代码。这只是为了给你一个要点。
答案 1 :(得分:0)
试试这个:
Map<String, Object> data = new HashMap<String, Object>();
data.put( "name", "Mars" );
data.put( "age", 32 );
data.put( "city", "NY" );
JSONObject json = new JSONObject();
json.putAll( data );
System.out.printf( "JSON: %s", json.toString(2) );
output::
JSON: {
"age": 32,
"name": "Mars",
"city": "NY"
}
您也可以尝试使用Google GSON。 Google的GSON是将Java对象转换为JSON表示的最佳库。