转换Map <object,list <object =“”>&gt;使用java 8将dataMap转换为json

时间:2016-08-26 06:14:13

标签: json java-8

我有一张包含以下原型的地图

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 ='您已安排每月检查。'}] \“}”

2 个答案:

答案 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表示的最佳库。