When java traversing the json string and obtaining the corresponding KV value, various troubles are caused, such as taking out the list in json to convert it into JSONArray, then converting the object in the list into a map, and then taking the value (the previous practice). Fairy, through Alibaba's fastjson, you can easily convert str into JSONArray, then force the object in it to JSONObject, and then obtain the value through obj.getInteger("key") and obj.getString("key").
JSONArray json = (JSONArray) JSONArray.parse(str);for (Object obj : json) { JSONObject jo = (JSONObject)obj; int status = jo.getInteger("status"); String message= jo.getString("message"); System.out.println("status---" + status + "---message---" + message);}1. When there are arrays and map objects in the json string, traverse the data, and the data format is as follows:
[ { "status":0, "tags":[ "check:ntp" ], "timestamp":1492151922.198, "check":"datadog.agent.check_status", "host_name":"song-2", "message":null, "id":2 }, { "status":0, "tags":null, "timestamp":1492151922.2325, "check":"datadog.agent.up", "host_name":"song-2", "message":null, "id":5 }]When parsing the above json string data, if you do not use fastjson or Gson, the parsing method is as follows:
Method 1
/** * In the host details, the platform service status and message of the exception error message that reports an error * @param str * @return * @throws Exception */ private List<Map<String,String>> operaStr(String str) throws Exception{ List<Map<String,String>> mList = new ArrayList<Map<String,String>>();//Probe-activated service name list JSONArray json = (JSONArray) JSONArray.parse(str); Map<String,Object> objMap = null; Map<String,String> resMap = null; for (Object obj : json) { objMap = Obj2Map(obj); @SuppressWarnings("unchecked") Map<String,Object> mObj = (Map<String, Object>) objMap.get("map"); int status = (Integer) mObj.get("status"); if(status != 0){ resMap = new HashMap<String,String>(); switch (status) { case 1: resMap.put("status","WARNING"); break; case 2: resMap.put("status","ERROR"); break; case 3: resMap.put("status","CRIT"); break; default: break; } resMap.put("serviceName", ((String) mObj.get("check")).split("//.")[0]); resMap.put("msg", (String)mObj.get("message")); mList.add(resMap); } } return mList; } /** * object to map * @param obj * @return * @throws Exception */ public Map<String,Object> Obj2Map(Object obj) throws Exception{ if(obj == null){ return null; } Map<String,Object> map=new HashMap<String, Object>(); Field[] fields = obj.getClass().getDeclaredFields(); for(Field field:fields){ field.setAccessible(true); map.put(field.getName(), field.get(obj)); } return map; }Method 2
/** * In the host details, the platform service status and message of the exception error message that reports an error * @param str * @return * @throws Exception */ private List<Map<String,String>> operaStr(String str) throws Exception{ List<Map<String,String>> mList = new ArrayList<Map<String,String>>();//The service name that the probe is turned on JSONArray json = (JSONArray) JSONArray.parse(str); Map<String,String> resMap = null; for (Object obj: json) { JSONObject jo = (JSONObject)obj; int status = jo.getInteger("status"); if(status != 0){ resMap = new HashMap<String,String>(); switch (status) { case 1: resMap.put("status","WARNING"); break; case 2: resMap.put("status","ERROR"); break; case 3: resMap.put("status","CRIT"); break; default: break; } resMap.put("serviceName", (jo.getString("check")).split("//.")[0]); resMap.put("msg", jo.getString("message")); mList.add(resMap); } } return mList; }2. When an array contains an array in a json string, iterates over the data, and the data format is as follows:
[ [ "haproxy", "haproxy", 0, "ERROR", "swdfghyjuikl", { } ], [ "gearmand", "gearmand", 0, "ERROR", "'Found no valid connections in list: [<GearmanConnection localhost:4730 connected=False>]'", { "version":"[8, 4, 20]" } ]]Method 1
/** * Get exception information by querying agentChecksStr* @param agentChecksStr * @return */ private List<Map<String,String>> getExceptInfoFromAgentChecks(String agentChecksStr){ List<Map<String,String>> mList = new ArrayList<Map<String,String>>();//Probe-activated service name list //mList In the host details, the platform service status and message of the exception error message report error Object jsonArray = JSONArray.parse(agentChecksStr); @SuppressWarnings("unchecked") List<List<Object>> list= (List<List<Object>>) jsonArray; Map<String,String> map = null; for(int i=0;i<list.size();i++){ map = new HashMap<String,String>(); String status = list.get(i).get(3).toString(); if(!status.equals("OK")){ String serviceName = list.get(i).get(0).toString(); String msg = list.get(i).get(4).toString(); map.put("serviceName", serviceName); map.put("status", status); map.put("msg", mList.add(map); } } return mList; }Method 2
/** * Get exception information by querying agentChecksStr* @param agentChecksStr * @return */ private List<Map<String,String>> getExceptInfoFromAgentChecks(String agentChecksStr){ //Probe enabled service name List<Map<String,String>> mList = new ArrayList<Map<String,String>>(); JSONArray jsonArray = (JSONArray) JSONArray.parse(agentChecksStr); Map<String,String> map = null; for (Object obj : jsonArray) { map = new HashMap<String,String>(); JSONArray ja = (JSONArray)obj; String status = ja.getString(3); if(!status.equals("OK")){ String serviceName = ja.getString(0); String msg = ja.getString(4); map.put("serviceName", serviceName); map.put("status", status); map.put("msg", mList.add(map); } } return mList; }Gson converts json strings into json objects:
import com.google.gson.Gson;import com.google.gson.JsonArray;import com.google.gson.JsonElement;import com.google.gson.JsonObject;import com.google.gson.JsonParser;public class MainTest { public static void main(String[] args) throws Exception{ String jsonstr0 = "{/"alarmDetails/":{/"conditionDetails/":{/"alarmId/":7,/"alarmNodataNotifyTime/":1,/"alarmNowSeriesWaitTime/":2},/"conditionStatic/":{/"alarmId/":7,/"conditionAggregate/":/"avg/",/"conditionOperator/":1,/"conditionThresholdTime/": 5,/"conditionThresholdValue/":/"123/"},/"metricDetails/":{/"alarmId/":7,/"metricAggregater/":/"avg/",/"metricBy/":/"host/",/"metricExcludeTag/":/"host:paas-177/",/"metricName/":/"system.cpu.user/",/"metricQ/":/"avg:system.cpu.user{ #address:wuhan,!host:paas-177}by{host}/",/"metricTag/":/"#address:wuhan/"},/"notify/":[{/"alarmId/":7,/"notifyChannel/":5,/"notifyUserId/":1},{/"alarmId/":7,/"notifyChannel/":5,/"notifyUserId/":2}],/"view/":{/"alarmExpression/":/"a vg(last_5m)avg:system.cpu.user{#address:wuhan,!host:paas-177}by{host}>123.0/",/"alarmId/":7,/"alarmLastValue/":/"UP/",/"alarmName/":/"static_metric/",/"alarmStatus/":1,/"alarmType/":2,/"alarmTypeJoin/":3,/"createTime/":/"2017-06-28 17:25:52.0/",/"createUserId/":1,/"isDisable/":false,/"lastAlarmTime/":/"2017-06-28 17:25:27.0/",/"metricName/":/"system.cpu.user/",/"metricTag/":/"#address:wuhan/",/"updateTime/":/"2017-06-29 15:49:18.0/"}},/"alarmId/":7,/"allMark/":{/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:paas-177}/":{/"changePutTime/":true,/"lastPutTsdbTime/":1499655343,/"lastSuccessCheckTime /":1499655349,/"series/":/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:paas-177}/",/"tagMap/":{/"host/":/"cfeng-4/",/"#address/":/"wuhan/",/"!host/":/"paas-177/"}}},/"joinType/": 3,/"useMetricUnit/":/"percent/",/"validataDetails/":{/"status/":0,/"validataMerges/":[{/"alarmMarkDto/":{/"changePutTime/":true,/"lastPutTsdbTime/":1499655343,/"lastSuccessCheckTime/":1499 655349,/"series/":/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:paas-177}/",/"tagMap/":{/"host/":/"cfeng-4/",/"#address/":/"wuhan/",/"!host/":/"paas-177/"}},/"status/":0,/"tag/":: /"host:cfeng-4/",/"validataNodata/":{/"currentTime/":1499655349,/"isNodata/":false,/"lastSuccessCheckTime/":1499655349,/"series/":/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:p aas-177}/",/"tag/":{/"host/":/"cfeng-4/",/"#address/":/"wuhan/",/"!host/":/"paas-177/"},/"thresholdTime/":60},/"validataStatic/":{/"converToThresholdValue/":123.0,/"end/":1499655343,/"inte rvalAggregator/":/"avg/",/"isAlart/":true,/"operator/":1,/"series/":/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:paas-177}/",/"start/":1499655043,/"sysUnit/":/"percent/",/"tag/"" :{/"#address/":/"wuhan/",/"host/":/"cfeng-4/",/"!host/":/"paas-177/"},/"thresholdTime/":300,/"thresholdValue/":/"123/",/"value/":5.715769243240357}}],/"validataTimeSeconds/":1499655349}}"; String jsonstr1 = "{/"alarmDetails/":{/"conditionDetails/":{/"alarmId/":7,/"alarmNodataNotifyTime/":1,/"alarmNowSeriesWaitTime/":2},/"conditionStatic/":{/"alarmId/":7,/"conditionAggregate/":/"avg/",/"conditionOperator/":1,/"conditionThresholdTime/": 5,/"conditionThresholdValue/":/"123/"},/"metricDetails/":{/"alarmId/":7,/"metricAggregater/":/"avg/",/"metricBy/":/"host/",/"metricExcludeTag/":/"host:paas-177/",/"metricName/":/"system.cpu.user/",/"metricQ/":/"avg:system.cpu.user{ #address:wuhan,!host:paas-177}by{host}/",/"metricTag/":/"#address:wuhan/"},/"notify/":[{/"alarmId/":7,/"notifyChannel/":5,/"notifyUserId/":1},{/"alarmId/":7,/"notifyChannel/":5,/"notifyUserId/":2}],/"view/":{/"alarmExpression/":/"a vg(last_5m)avg:system.cpu.user{#address:wuhan,!host:paas-177}by{host}>123.0/",/"alarmId/":7,/"alarmLastValue/":/"UP/",/"alarmName/":/"static_metric/",/"alarmStatus/":1,/"alarmType/":2,/"alarmTypeJoin/":3,/"createTime/":/"2017-06-28 17:25:52.0/",/"createUserId/":1,/"isDisable/":false,/"lastAlarmTime/":/"2017-06-28 17:25:27.0/",/"metricName/":/"system.cpu.user/",/"metricTag/":/"#address:wuhan/",/"updateTime/":/"2017-06-29 15:49:18.0/"}},/"alarmId/":7,/"allMark/":{/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:paas-177}/":{/"changePutTime/":true,/"lastPutTsdbTime/":1499655374,/"lastSuccessCheckTime /":1499655379,/"series/":/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:paas-177}/",/"tagMap/":{/"host/":/"cfeng-4/",/"#address/":/"wuhan/",/"!host/":/"paas-177/"}}},/"joinType/": 3,/"useMetricUnit/":/"percent/",/"validataDetails/":{/"status/":0,/"validataMerges/":[{/"alarmMarkDto/":{/"changePutTime/":true,/"lastPutTsdbTime/":1499655374,/"lastSuccessCheckTime/":1499 655379,/"series/":/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:paas-177}/",/"tagMap/":{/"host/":/"cfeng-4/",/"#address/":/"wuhan/",/"!host/":/"paas-177/"}},/"status/":0,/"tag/":: /"host:cfeng-4/",/"validataNodata/":{/"currentTime/":1499655379,/"isNodata/":false,/"lastSuccessCheckTime/":1499655379,/"series/":/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:p aas-177}/",/"tag/":{/"host/":/"cfeng-4/",/"#address/":/"wuhan/",/"!host/":/"paas-177/"},/"thresholdTime/":60},/"validataStatic/":{/"converToThresholdValue/":123.0,/"end/":1499655374,/"inte rvalAggregator/":/"avg/",/"isAlart/":true,/"operator/":1,/"series/":/"avg:system.cpu.user{host:cfeng-4,#address:wuhan,!host:paas-177}/",/"start/":1499655074,/"sysUnit/":/"percent/",/"tag/"" :{/"#address/":/"wuhan/",/"host/":/"cfeng-4/",/"!host/":/"paas-177/"},/"thresholdTime/":300,/"thresholdValue/":/"123/",/"value/":5.089640821729388}}],/"validataTimeSeconds/":1499655379}}"; Set<String> set = new HashSet<String>(); set.add(jsonstr0); set.add(jsonstr1); Gson gs = new Gson(); List<Object> eventList = new ArrayList<Object>(); for (String str : set) { JsonObject returnData = new JsonParser().parse(str).getAsJsonObject(); JsonObject ad = returnData.get("alarmDetails").getAsJsonObject(); JsonObject vd = returnData.get("validataDetails").getAsJsonObject(); JsonArray vm = vd.get("validataMerges").getAsJsonArray(); JsonArray nf = ad.get("notify").getAsJsonArray(); JsonObject v = ad.get("view").getAsJsonObject(); String validataTimeSeconds = vd.get("validataTimeSeconds").toString(); for (JsonElement je : vm) { je.getAsJsonObject().add("view", v); je.getAsJsonObject().add("notify", nf); je.getAsJsonObject().addProperty("validataTimeSeconds", Long.parseLong(validataTimeSeconds)); eventList.add(je); } } for (Object obj : eventList) { String inParam = gs.toJson(obj); System.out.println(inParam); } System.out.println(gs.toJson(eventList)); }} //Get device information (only hardware devices and virtual devices have it) HashMap<String,String> paramMap = new HashMap<String,String>();paramMap.put("hostid", mHostId);paramMap.put("ptype", dto.getPtype());paramMap.put("type_flag", dto.getTypeFlag());paramMap.put("api_key", apikey);String resStr = HttpUtils.get(DEVICE_INFO_URL, paramMap);JSONObject jobj = JSON.parseObject(resStr);JSONObject obj = (JSONObject)jobj.get("result");if(obj.size() != 0){ String restore = jobj.get("result").toString(); DeviceInfoDto deviceInfoDto = new Gson().fromJson(restr, DeviceInfoDto.class); dto.setDeviceInfo(deviceInfoDto);} List<Map<Integer, Long>> result = new ArrayList<Map<Integer, Long>>();Map<String, String> timeMap = null;List<Map<String, String>> timeArr = new ArrayList<Map<String, String>>(); for (int j = 0; j < result.size(); j++) {timeMap = new HashMap<String, String>(); if (j == result.size() - 1) { timeMap.put("startTime", result.get(j).get(result.get(j).keySet().iterator().next()) + ""); timeMap.put("endTime", System.currentTimeMillis() + "");} else { timeMap.put("startTime", result.get(j).get(result.get(j).keySet().iterator().next()) + ""); timeMap.put("endTime", (result.get(j+1).get(result.get(j+1).keySet().iterator().next()) - 1) + "");}timeMap.put("hostName", "*");//1:info,2:error,3:success,4:warningInteger key = result.get(j).keySet().iterator().next();if (key == 1) { timeMap.put("status", "info");} else if (key == 2) { timeMap.put("status", "error");} else if (key == 3) { timeMap.put("status", "success");} else if (key == 4) { timeMap.put("status", "warning");} timeArr.add(timeMap);}The above example of Java traversing json string value is all the content I share with you. I hope you can give you a reference and I hope you can support Wulin.com more.