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

Issue with conversion of Map inside a Map into JSON in Java

本文关键字:Map JSON 问题 中的 Java 中将 转换      更新时间:2023-09-26

我在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

内部哈希映射并没有完全转换为JSON格式。我想要一些东西,这样内部的hashmap也可以转换成类似于外部map的map。对我来说,在任何一方(客户端/服务器)进行更改都是可行的。我该怎么办?

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);
            });
         }
    });
}