将Map中的Map转换为Java中的JSON的问题

时间:2014-09-25 07:05:04

标签: java javascript json hashmap jackson

我有一个Java树形图,其结构如下:

public static Map<String, Map<String, Integer>> testMap = new TreeMap<String, Map<String, Integer>>();

public String getTestMapInJson(Map<String, Map<String, Integer>> testMap){
ObjectMapper mapper = new ObjectMapper();
String testMapInJson = mapper.writeValueAsString(testMap);
return testMapInJson;
}

现在,当我尝试使用Jackson API(上面的代码段)在JSON中转换此地图时,我收到这样的数据,我想在HTML表格中填充这些数据。

[
{
    "key": "1.1.1.1",
    "value": {
        "string1": 500,
        "string2": 400
    }
},
{
    "key": "2.2.2.2",
    "value": {
        "string1": 500,
        "string2": 400
    }
}
]

HTML表格输出如下:

IP Address  Value
1.1.1.1     [object Object]
2.2.2.2     [object Object]

我想这样:

IP Address  Value
1.1.1.1     String1 count1
            String2 count2
2.2.2.2     String1 count1
            String2 count2

内部hashmap不会完全转换为JSON格式。我想要一些东西,以便内部hashmap也像外部地图一样转换成类似的地图。 我可以在任何一方(客户端/服务器)进行更改。我该怎么办?

1 个答案:

答案 0 :(得分:1)

var resp = [
{
    "ip": "1.1.1.1",
    "data": {
        "string1": 500,
        "string2": 400
    }
},
{
    "ip": "2.2.2.2",
    "data": {
        "string1": 500,
        "string2": 400
    }
}
]

访问对象:

for(var obj : resp) {
     $.each(obj, function(key,value){
         alert(key + "==" + value);
         if(key == "data") {
            $.each(value, function(innerKey, innerVal) {
               alert(innerKey + "===" + innerVal);
            });
         }
     });
}

设计表格:

var table = $("<table>");
//header
var header = $("<tr>").append($("<th>").text("IP Address")).append($("<th>").text("Value"));

for(var obj : resp) {
    $.each(obj, function(key,value){
        var isFirst = true;
        if(key == "data") {
            $.each(value, function(innerKey, innerVal) {
              var tr;
              if(isFirst) {
                  // ip address and value
                  tr = $("<tr>").append($("<td>").text(value)).append($("<td>").text(innerKey + " " + innerValue));
                  isFirst = false;
              } else {
                  // blank and value
                  tr = $("<tr>").append($("<td>").text("")).append($("<td>").text(innerKey + " " + innerValue));
              }
              table.append(tr);
            });
         }
    });
}