如何在JAVA中创建JSON对象

时间:2017-10-22 10:48:42

标签: java json jsp servlets

我尝试创建JSON对象。我的代码:

    Map<String,List<Map<String, List<Map<String, Object>>>>> GroupsMap = new HashMap<String,List<Map<String, List<Map<String, Object>>>>>();

    List<IamMonitoringServerType> typ = DBProvider.GetAllServerTypesConfiguration();
    for (IamMonitoringServerType type : typ){
        Map<String, List<Map<String, Object>>> serversMap = new HashMap<>();
        List<Map<String, List<Map<String, Object>>>> groupList = new ArrayList<Map<String, List<Map<String, Object>>>>();

        List<IamMonitoringServer> servers = DBProvider.GetServersByType(type);
        for ( IamMonitoringServer server : servers) {
            Map<String,Object> parameterMap = new HashMap<String,Object>();
            List<Map<String, Object>> serverList = new ArrayList<Map<String, Object>>();

            String server_name = server.getServerName();
            int id = server.getId().intValue();
            int newest_data_id = DBProvider.getNewestServerDataId(id);

            parameterMap.put("server_id", id);
            parameterMap.put("newest_data_id", newest_data_id);
            serverList.add(parameterMap);
            serversMap.put(server_name, serverList);            
        }
        groupList.add(serversMap);
        GroupsMap.put(type.getServerTypeName(), groupList);
    }
    System.out.println("GsON OBJECT: "+ new Gson().toJson(GroupsMap));

,结果如下:

{
"GROUP_NAME_1":
[
    {
        "1_server":
        [
            {
                "server_id":17,
                "newest_data_id":991380
            }
        ],
        "2_server":
        [
            {
                "server_id":16,
                "newest_data_id":991383
            }
        ],
        "3_server":
        [
            {
                "server_id":14,
                "newest_data_id":991389
            }
        ]
    }
]
,"GROUP_NAME_2":
[
    {
        "4_server":
        [
            {
                "server_id":1,
                "newest_data_id":991395
            }
        ],
        "5_server":
        [
            {
                "server_id":13,
                "newest_data_id":991382
            }
        ],
        "6_server":
        [
            {
                "server_id":3,
                "newest_data_id":991390
            }
        ]
    }
]
}

我想将此结果更改为这样的格式(其中一个组的样本):

{
"GROUP_NAME":
[
    {
        "server_name": "4_server"
        "serverIp": xxx.xxx.xxx.xxx
        "param":
        [
            {
                "server_id":1,
                "newest_data_id":991395
            }
        ],
        "server_name": "5_server"
        "serverIp": xxx.xxx.xxx.xxx
        "param":
        [
            {
                "server_id":13,
                "newest_data_id":991382
            }
        ]
    }
]
}

我修改了我的代码,但此时我只收到每组最后一台服务器:

Map<String,List<Map<String, Object>>> GroupsMap = new HashMap<String,List<Map<String, Object>>>();
    List<IamMonitoringServerType> typ = DBProvider.GetAllServerTypesConfiguration();

    for (IamMonitoringServerType type : typ){
        Map<String, Object> servers_nameMap = new HashMap<>();
        List<Map<String, Object>> groupList = new ArrayList<>();

        List<IamMonitoringServer> servers = DBProvider.GetServersByType(type);

        for ( IamMonitoringServer server : servers) {
            Map<String,Object> parameterMap = new HashMap<String,Object>();
            List<Map<String, Object>> serverList = new ArrayList<Map<String, Object>>();

            String server_name = server.getServerName();
            int id = server.getId().intValue();
            int newest_data_id = DBProvider.getNewestServerDataId(id);

            parameterMap.put("server_id", id);
            parameterMap.put("newest_data_id", newest_data_id);
            serverList.add(parameterMap);

            servers_nameMap.put("server_name", server_name);
            servers_nameMap.put("server_ip", server_name);
            servers_nameMap.put("param", serverList);   
        }
        groupList.add(servers_nameMap);
        GroupsMap.put(type.getServerTypeName(), groupList);
    }
    System.out.println(new Gson().toJson(GroupsMap));

我是Java编程的初学者,我认为原因是将元素列表更改为Object。我应该如何纠正我的代码以获得预期的结果?

第二个问题是,当我想获取特定数据,例如服务器名称,参数列表或特定参数值时,如何在Servlet端解析这个JSON对象?

0 个答案:

没有答案